为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕的地6264312 2022-06-09 11:18:16
我正在尝试创建一个包装函数,该函数返回一个 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 回答

?
慕沐林林

TA贡献2016条经验 获得超9个赞

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


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


function wrapper() {

  return MyApi.asyncCall()

}

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


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


function wrapper() {

  return MyApi.asyncCall()

    .then((data) => {

      doSomeOtherStaff(data)

      return data

    })

}

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


查看完整回答
反对 回复 2022-06-09
?
HUWWW

TA贡献1874条经验 获得超12个赞

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


MyApi.asyncCall()

      .then(data => {

        // do this first, then resolve outer promise

        resolve();

      })

      .catch(e => {

        reject();

      });

本身就是一个承诺,只需返回它就足够了。


查看完整回答
反对 回复 2022-06-09
?
慕慕森

TA贡献1856条经验 获得超17个赞

您可以将 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');

  });

}


查看完整回答
反对 回复 2022-06-09
  • 3 回答
  • 0 关注
  • 100 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号