gpt4 book ai didi

javascript - 在 Promise.prototype.then 中将 Promise 作为 onFulfilled 函数传递

转载 作者:行者123 更新时间:2023-11-28 17:14:19 25 4
gpt4 key购买 nike

我最近发现你可以传递一个 promise ,而不是一个函数作为 promise.then 中的 onFulfilled 函数

例如:

var p = new Promise(function(resolve, reject) {
setTimeout(function(){
resolve("First Promise");
}, 4000);
});

var q = new Promise(function(resolve, reject) {
setTimeout(function(){
console.log("Yo");
resolve("Second Promise");
}, 8000);
});


p.then(q).then(function(data){
console.log(data);
});

这将打印以下输出

First Promise (at 4th second)
Yo (at 8th second)

这对我来说听起来很奇怪,因为作为练习,我们只在 promise.then 中传递函数,而不是传递新的 Promise。

有人可以帮助我确定可以在哪里使用它的用例吗?而且,如果您在 promise.then 中传递 Promise,那么确切的行为是什么?

编辑:

我在 Spotify Web Player 上看到了类似的行为。 enter image description here

this._onStreamerConnect() 返回一个 Promise,其上附加有 .then.then 接受一个参数 e,它也是一个 Promise,如右侧面板中的 Watch 选项卡所示

最佳答案

根据MDN documentation :

If one or both arguments are omitted or are provided non-functions, then then will be missing the handler(s), but will not generate any errors. If the Promise that then is called on adopts a state (fulfillment or rejection) for which then has no handler, a new Promise is created with no additional handlers, simply adopting the final state of the original Promise on which then was called.

这意味着调用 p.then(q).then(function...) 与调用 p.then(function...) 相同。 q 参数被完全忽略,并且不是 promise 链的一部分。

q 的执行器函数最终在 8 秒内解析,独立于 p,它仍然在 4 秒内解析,并且没有任何内容消耗字符串 ”第二个 Promise “ 正如您从输出中看到的那样。

关于javascript - 在 Promise.prototype.then 中将 Promise 作为 onFulfilled 函数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53855031/

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