我有以下代码,但我不明白为什么它不能按我的要求执行。作为 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/