gpt4 book ai didi

javascript - 对 promise 感到困惑

转载 作者:行者123 更新时间:2023-11-30 11:20:22 25 4
gpt4 key购买 nike

我有以下代码,但我不明白为什么它不能按我的要求执行。作为 JS 和 jQuery 的新手,我很困惑:

1) 即使我没有在 ready() 函数中编写任何代码,promises 也会运行。我的意思是,即使我不调用它们,它们也会运行。2)这段代码的意图是打印1、2,然后暂停3秒,打印3,打印END。相反,它打印 1、2、END,三秒后打印 3。

我在这里以及其他网站和博客上找到了其他示例,但作为 JS 的新手我还没有理解它们。我做错了什么?

$(document).ready(function (){
$.when(f1)
.then(f2)
.then(f3)
.then(final);
});

function prn(texto) {
$('p').append(texto);
}

var f1 = new Promise(function(resolve, reject) {
resolve(prn('1<br><br>'));
reject('err');
});

var f2 = new Promise(function(resolve, reject) {
resolve(prn('2<br><br>'));
reject('err');
});

var f3 = new Promise(function(resolve, reject) {
setTimeout(function(){
resolve(prn('3<br><br>'));
reject('err');
}, 3000);
});

var final = new Promise(function(resolve, reject) {
resolve(prn('END<br><br>'));
reject('err');
});

最佳答案

一旦 Promise 被定义,它可能会开始运行。

如果运行还没有结束, then 会等待,如果里面的函数已经结束,则返回 resolve 的值。

您可以通过定义一个工厂函数来避免让 promise 在它应该运行之前运行,即一个仅在被调用时才构造 Promise 的函数。

关于javascript - 对 promise 感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50042370/

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