猿问

如何创建一个函数返回一个在内部承诺解决后解决的承诺

我正在尝试创建一个包装函数,该函数返回一个 Promise 对象,该对象将在内部 Promise 解析后解析。基本上,是这样的:


function wrapper() {

  return new Promise((resolve, reject) => {

    MyApi.asyncCall()

      .then(data => {

        // do this first, then resolve outer promise

        resolve();

      })

      .catch(e => {

        reject();

      });

  });

}

我需要这样做的原因是我有一个接受承诺参数的接口,然后在承诺解决后触发一个动作。我需要进行异步调用,然后对响应做一些事情,然后触发接口。


编辑 目的说明:在解决外部承诺之前,我需要使用内部承诺的响应执行操作。该接口接受一个未解析的 Promise 对象,然后在它被解析时挂载一个组件。如果我通过内部承诺,它将在执行数据响应的操作之前挂载。


慕的地6264312
浏览 101回答 3
3回答

慕沐林林

基本上——你做对了。当你需要时,你会解决\拒绝承诺。但是你可以很容易地做到这一点——只需返回原始承诺:function wrapper() {  return MyApi.asyncCall()}所以你返回的承诺,当 MyApi.asyncCall 解决或拒绝时解决或拒绝。如果你需要在内部做一些工作人员,你可以在这个承诺中做:function wrapper() {  return MyApi.asyncCall()    .then((data) => {      doSomeOtherStaff(data)      return data    })}请注意,如果您需要外部数据 - 您必须从内部的 then 回调中返回它。

HUWWW

你能解释一下为什么你需要包装承诺吗?MyApi.asyncCall()      .then(data => {        // do this first, then resolve outer promise        resolve();      })      .catch(e => {        reject();      });本身就是一个承诺,只需返回它就足够了。

慕慕森

您可以将 async await 用于第一个承诺,并在获取第一个承诺的数据后返回第二个承诺:function wrapper(){  return new Promise( async   (resolve,reject)=>{   let myFirstPromise =  await firestPromise();   // do your stuff here   console.log(myFirstPromise)   return resolve('Second Promise');  });}function firestPromise(){  return new Promise( (resolve,reject)=>{   return resolve('First Promise');  });}
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答