Javascript 对承诺感到困惑
我有下面的代码,我不明白为什么它不能做我想要的。作为JS和jQuery的新手,我对以下几点感到困惑: 1) 即使我没有在ready()函数中编写任何代码,承诺也会运行。我是说,即使我不打电话,承诺也会兑现。 2) 此代码的目的是打印1、2,然后暂停3秒,打印3和打印结束。相反,它打印1,2,结束,然后在3秒钟后打印3 我在这里以及其他网站和博客上都找到了其他的例子,但作为JS的新手,我还没有理解它们。我做错了什么Javascript 对承诺感到困惑,javascript,jquery,promise,Javascript,Jquery,Promise,我有下面的代码,我不明白为什么它不能做我想要的。作为JS和jQuery的新手,我对以下几点感到困惑: 1) 即使我没有在ready()函数中编写任何代码,承诺也会运行。我是说,即使我不打电话,承诺也会兑现。 2) 此代码的目的是打印1、2,然后暂停3秒,打印3和打印结束。相反,它打印1,2,结束,然后在3秒钟后打印3 我在这里以及其他网站和博客上都找到了其他的例子,但作为JS的新手,我还没有理解它们。我做错了什么 $(document).ready(function (){ $.when(f
$(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');
});
$(文档).ready(函数(){
$.when(f1)
.然后(f2)
。然后(f3)
.然后(最终);
});
功能prn(texto){
$('p').append(texto);
}
var f1=新承诺(功能(解决、拒绝){
解析(prn('1
');
拒绝(“错误”);
});
var f2=新承诺(功能(解决、拒绝){
解析(prn('2
');
拒绝(“错误”);
});
var f3=新承诺(功能(解决、拒绝){
setTimeout(函数(){
解析(prn('3
');
拒绝(“错误”);
}, 3000);
});
var final=新承诺(功能(解决、拒绝){
解析(prn('END
');
拒绝(“错误”);
});
一旦定义了承诺,如果可能,它可能会开始运行
如果运行尚未结束,则等待;如果内部函数已结束,则返回resolve
的值
您可以通过定义一个工厂函数(即仅在调用承诺时才会构造承诺的函数)来避免承诺提前运行。代码中有几个错误
var f1=新承诺(函数(解析、拒绝){
解析(prn('1
');
拒绝(“错误”);
});代码>将承诺分配给变量,这就是它运行的原因。您真正想要做的是创建一个返回承诺的函数。这个函数就是您需要调用的。在这种情况下,承诺在定义时会立即被解析和拒绝。请注意,它们是分配给变量的,而不是由它们生成的。您可能打算执行让f1=()=>新承诺…
-即返回承诺对象而不是声明一个。即使我不调用承诺,承诺也会运行
-您已经调用了它们。您创建了它们(newpromise
),并立即解析了它们(传递到newpromise
的回调将立即被调用)。