首页 > 解决方案 > 如何创建一个函数返回一个在内部承诺解决后解决的承诺

问题描述

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

标签: javascriptes6-promise

解决方案


基本上——你做对了。当你需要时,你会解决\拒绝承诺。

但是你可以很容易地做到这一点——只需返回原始承诺:

function wrapper() {
  return MyApi.asyncCall()
}

所以你返回的承诺,当 MyApi.asyncCall 解决或拒绝时解决或拒绝。

如果你需要在内部做一些工作人员,你可以在这个承诺中做:

function wrapper() {
  return MyApi.asyncCall()
    .then((data) => {
      doSomeOtherStaff(data)
      return data
    })
}

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


推荐阅读