如何创建一个函数,该函数在内部promise解析后返回一个promise

时间:2020-04-01 20:05:26

标签: javascript es6-promise

我试图创建一个包装函数,该函数返回一个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对象,然后在解析后装入组件。如果我通过内部承诺,它将在执行数据响应操作之前安装。

3 个答案:

答案 0 :(得分:1)

基本上-您做对了。您决心\拒绝需要时的诺言。

但是您可以轻松实现-只需返回原始承诺:

Foo

因此,您返回的诺言将在MyApi.asyncCall解析或拒绝时解决或拒绝。

如果您需要在内部做一些工作,可以在以下承诺内完成:

BoundedContext

请注意,如果您需要外部数据-您必须从内部的then回调中返回它。

答案 1 :(得分:0)

您能解释一下为什么您需要包装承诺吗?

MyApi.asyncCall()
      .then(data => {
        // do this first, then resolve outer promise
        resolve();
      })
      .catch(e => {
        reject();
      });

本身就是一个承诺,只需返回即可。

答案 2 :(得分:0)

您可以对第一个承诺使用异步等待,并在获取第一个承诺的数据后返回第二个承诺:

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');
  });
}
相关问题