什么是“;Promise在事件循环的同一个循环上点火“;意思是
What does "Promise fires on the same turn of the event loop" mean?
NodeJS新手。通过promise教程("promise-it-wont-hurt"),我有以下脚本:
var Q = require('q');
var deferred = Q.defer();
deffered.resolve('SECOND');
deffered.promise.then(console.log);
console.log('FIRST');
输出:
FIRST
SECOND
我不明白,我本以为既然决心是第一个被解雇的,我应该先看看第二个。
他们解释说,之所以会发生这种情况,是因为"Promise在事件循环的同一个转弯处开火"。我不明白这意味着什么。。。
基本上,关键是promise的then
处理程序在当前代码流完成执行并将控制返回到执行环境(在本例中为Node)之前不会运行。
这是承诺/A+合规承诺的一个重要特征,因为它确保了可预测性。无论承诺是否立即解决:
function getAPromise() {
var Q = require('q');
var deferred = Q.defer();
deferred.resolve('SECOND');
return deferred.promise;
}
getAPromise().then(console.log);
console.log('FIRST');
或者是否在10秒后解决:
function getAPromise() {
var Q = require('q');
var deferred = Q.defer();
setTimeout(function () {
deferred.resolve('SECOND');
}, 10000);
return deferred.promise;
}
getAPromise().then(console.log);
console.log('FIRST');
可以保证CCD_ 2将始终首先被记录。
这在的第2章和第3章中有详细的讨论;性能。有时异步运行,有时候同步运行的异步操作被称为Zalgos,它们被认为不是一件好事。
需要注意的是,jQuery中广泛使用的promise不遵守这种行为,还存在许多其他问题。如果你发现自己有一个jQuery承诺,用一个合适的承诺来包装它,然后继续:
Q($.ajax(...)).then(breatheWithEase);
他们解释说,之所以会发生这种情况,是因为"Promise在事件循环的同一个转弯处启动"。我不明白这意味着什么。。。
我也是,我觉得这部分没什么意义。这可能意味着,当您调用resolve
或reject
时,promise会立即得到解决,从此不会改变其状态。这与回调无关。
更重要的是要理解该段中的下一句话:
您可以预期传递给promise的"then"方法的函数将在事件循环的NEXT循环中被调用
这就像一条简单的经验法则:then
回调总是异步调用。始终,在每一个恰当的承诺执行中;这是Promises/A+规范规定的。
为什么会这样?为了一致性。与您的示例片段不同,您不知道如何或何时解决promise——您只是从您调用的某个方法返回它。它可能已经得到解决,也可能仍然悬而未决。现在您调用promise的then
方法,就可以知道:它将是异步的。您不需要处理可能是同步的或不是同步的情况,也不需要更改代码的含义,它总是异步的。
- 使用while循环+break是一种可接受的方式;goto;手术的结束
- 什么'它的意思是当一个变量位于括号外时
- 什么意思是“;向原型添加方法”;
- 什么是“;传递给NewPromiseCapability的非构造函数值“;意思是
- 什么是“;(''+元素+'')“;意思是
- 意思是.js - 登录后重定向用户 - 在本地工作,但在部署时不起作用
- 意思是.JS中间件中的猫鼬填充不起作用
- 究竟是什么'提供静态文件'意思是
- 什么是“;用户:某事;意思是在javascript onclick事件中
- 什么是“;Promise在事件循环的同一个循环上点火“;意思是
- 对于function(),带有addEventListener的循环不是动态的
- 在 javaScript 中定义函数之前,什么意思是“一个单词:”
- 在轨道上打印东西(字面意思是对打印机)
- 两个不同的循环-都是don'不起作用
- 意思是.js AngularJS 菜单服务为页面分配角色
- 什么意思是“服务器标签格式不正确”,这个按钮会发生什么
- JavaScript 数组在循环外是正确的,但在循环内未定义
- $(function () { } in javascript/Jquery 中的意思是什么
- 什么是“;php://input"意思是
- 什么是'这'意思是javascript函数内部