在此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/