Javascript 关于'Promise'和'then()`执行令
假设我有一个这样的函数Javascript 关于'Promise'和'then()`执行令,javascript,promise,es6-promise,Javascript,Promise,Es6 Promise,假设我有一个这样的函数 const fn=()=>{ 返回工作() .then((finalResult)=>{//then 1 完成(最终结果); }); }; 恒功=()=>{ 返回承诺。解决(1) .然后(()=>{//然后2 返回进程1(); }).then((结果)=>{//then 3 返回过程2(结果); }); }; 我的问题是:finish将在process1和process2之后调用。具体来说,是然后1附加到承诺返回的承诺。解决(1)还是它附加到然后3然后每个都将等待其先前
const fn=()=>{
返回工作()
.then((finalResult)=>{//then 1
完成(最终结果);
});
};
恒功=()=>{
返回承诺。解决(1)
.然后(()=>{//然后2
返回进程1();
}).then((结果)=>{//then 3
返回过程2(结果);
});
};
我的问题是:
finish
将在process1
和process2
之后调用。具体来说,是然后1
附加到承诺返回的承诺。解决(1)
还是它附加到然后3
然后每个都将等待其先前的承诺,然后依次运行
如果前面的承诺返回一个值,则传递给回调的参数将是该值,或者如果它返回另一个承诺,则回调的参数将是该承诺返回的值
promise plus规范中规定:
如果/当承诺实现时,所有相应的oncompleted回调必须按照其对then的原始调用的顺序执行
可以保证finish(finalResult)
将以process2(result)
的结果运行(当然,除非有错误)
我发现,在抓住承诺的勇气方面,我非常有启发性 这首先是一个语法问题。你现在所做的相当于
const fn = () => {
const promiseA = work();
const promiseB = promiseA.then(finish); // then 1
return promiseB;
};
const work = () => {
const promiseC = Promise.resolve(1);
const promiseD = promiseC.then(process1); // then 2
const promiseE = promiseD.then(process2); // then 3
return promiseE;
};
只是引入了一些额外的变量(我还简化了函数表达式)
现在我们可以清楚地看到,work()
的结果就是它返回的结果,因此promiseA===promiseE
。因此,是的,finish
链接到“then3”调用的结果
知道then
创建了一个新的承诺(用于回调的最终结果),而不是返回原始承诺,我们还可以得出结论promiseE!==promiseC
,因此,finish
没有链接到承诺上。解决(1)
你的然后1
实际上链接到之后,然后3
这与承诺没有任何关系。work
的返回值是“then3”调用的返回值。