gpt4 book ai didi

javascript - promise 和操作顺序

转载 作者:行者123 更新时间:2023-12-02 23:27:23 24 4
gpt4 key购买 nike

如果这是一个基本概念,我深表歉意。我是 JavaScript 新手。

我试图理解以下函数的执行顺序。我设置了一个带有 2 个回调的 Promise 和一个带有 3 个回调的 Promise。

function getSum(n1, n2){
var isAnyNegative = function() {
return n1<0 || n2 < 0;
}
var promise = new Promise(function(resolve, reject) {
if (isAnyNegative()){
reject(Error('Negative not supported'));
}
resolve(n1 + n2)
});
return promise;
}

// Double Promise
getSum(5,6).then(function(result) {
console.log('DL1 '+result);
return getSum(10,20);
}, function(error){
console.log(error);
}).then(function(result) {
console.log('DL2 '+result);
}, function(error){
console.log(error);
});

// Triple Promise
getSum(5,6).then(function(result) {
console.log('TL1 '+result);
return getSum(10,20);
}, function(error){
console.log(error);
}).then(function(result){
console.log('TL2 '+result);
return getSum(30,40);
}, function(error){
console.log(error);
}).then(function(result){
console.log('TL3 ' +result);
}, function(error){
console.log(error);
});

输出如下(DL=>双层,TL=>三层):

DL1 11
TL1 11
DL2 30
TL2 30
TL3 70

它本来期望输出是双层然后是三层,但事实并非如此。我研究了提升,但据我读到的有关它的内容,它至少应该保护脚本内的执行顺序。这些函数是如何排序的以及为什么它们不按照出现的顺序执行?

如果需要更多详细信息,请询问,提前致歉并致谢。

最佳答案

运行 Promise 时,每个 .then 处理程序都会异步运行,如 https://javascript.info/microtask-queue 中所述。

基本上对于你的代码来说这意味着

  • 主代码先运行,DL1排队,TL1排队
  • 当主代码执行结束时,DL1 首先进入队列,因此它会执行 DL2 并将其排队
  • 当引擎完成 DL1 时,它会获取下一个排队项目; TL1,它执行 TL2 并将其排队。
  • 现在队列中的下一项是 DL2,其余 TL 紧随其后

如果您确实需要 promise 首先解决 DL,然后解决 TL,那么您需要使它们成为同一 promise 链的一部分

关于javascript - promise 和操作顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56678931/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com