在此link中javascript中的promises文档中。这个已经写完了:


  使用已解决的承诺,“ then”区块将立即触发,
       但其处理程序将异步触发


// using a resolved promise, the 'then' block will be triggered instantly,
// but its handlers will be triggered asynchronously as demonstrated by the console.logs

var resolvedProm = Promise.resolve(33);

var thenProm = resolvedProm.then(function(value){
    console.log("this gets called after the end of the main stack. the value
    received and returned is: " + value);
    return value;
});

// instantly logging the value of thenProm
console.log(thenProm);

// using setTimeout we can postpone the execution of a function to the moment
// the stack is empty

setTimeout(function(){
   console.log(thenProm);
});

// logs, in order:
// Promise {[[PromiseStatus]]: "pending", [[PromiseValue]]: undefined}
// "this gets called after the end of the main stack. the value received and returned is: 33"
// Promise {[[PromiseStatus]]: "resolved", [[PromiseValue]]: 33}


我不太理解它将说该块将被触发但处理程序是异步触发的那一部分。我的问题是:


那么什么是街区?它的处理程序是什么?它们有何不同?
每个触发什么?
当该异步触发器发生时,它毕竟会被解决


谢谢。

最佳答案

这个句子有点令人困惑,这是我试图解释我认为意味着什么的尝试。如果我在某个地方弄错了,请不要犹豫,向我扔石头。

.then()方法返回一个承诺。我认为the 'then' block will be triggered instantly表示.then方法在事件循环的当前运行中运行,并将立即返回promise。但是,传递给then方法的回调将异步执行,即在以下事件循环运行中执行。

因此,在该示例中,第一条记录的行是


  Promise {[[PromiseStatus]]: "pending", [[PromiseValue]]: undefined}


因为这:

var thenProm = resolvedProm.then(function(value){
    console.log("this gets called after the end of the main stack. the value
    received and returned is: " + value);
    return value; });


运行并返回promise,但尚未执行返回值的回调,因此该值未定义。

事件循环运行完成后,下一个循环开始并执行回调。此回调将值分配给promise并记录以下行:


  “这在主堆栈结束后被调用。收到的值
  返回的是:33“


最后,使用新分配的值记录承诺本身:


  承诺{[[[PromiseStatus]]:“已解决”,[[PromiseValue]]:33}


要更直接地回答您的问题,请:


Then是Promise上的一种方法,它采用一个回调函数并返回另一个promise。当原始的诺言得到解决时,该功能将被触发。
当原始的承诺被解决或被拒绝时,这就是触发在'then'方法中传递的回调函数的原因。没有什么“触发” .then()方法本身,它只是一种方法。
承诺的解决是触发回调的原因。


就像@Bergi所说的那样,造成混淆的最大原因可能是“块”一词,这里的含义可能仅仅是“ .then方法调用内的代码块”。

关于javascript - javascript promise中的“then块”和“then处理程序”有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49813134/

10-15 23:39