javascript - 对 promise 感到困惑

标签 javascript jquery promise

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

相关文章:

javascript - 谷歌地图信息窗口 ReactJS

javascript - 使用javascript中的循环创建html代码块

javascript - 如何增加模板柱之间的间隙

jquery - Selenium 单击按钮

javascript - Angular .js : using a directive to insert another directive as an attribute

jquery - JQuery 中的字符串比较?

javascript - Zapier 触发器中的顺序 promise

javascript - 为什么这个带有 promise 的测试没有通过?

javascript - 有没有一种方法可以在履行 promise 时执行某些代码,而与结果无关?

javascript - 每个()函数上的jquery load()一起工作