Nodejs 没有异步执行 promise 函数
Nodejs did not execute a promise function asynchronous
我写了一个小例子js来学习如何使用Promises。我预计脚本启动并立即输出"start",几秒钟后输出"45"。但是 insead ,脚本在没有任何输出的情况下开始,在退出之前,两行都被打印出来。我是否误解了承诺的工作方式或是否存在缓冲问题?
;(function(main, undefined) {
"use strict";
main.test = function() {
return new Promise(function(resolve, reject) {
for(var i = 0; i < 999999999; ++i);
resolve(45);
});
};
})(global);
global.test().then(function(r) {
console.log(r);
});
console.log("start");
$ 节点 -v0.12.6 版
将
代码包装在承诺中不会使其异步执行。它使使用异步代码变得更加容易。
在您的示例中,循环同步执行。下面是使用 setTimeout
的示例,它异步执行,而不是 for
循环。
;(function(main, undefined) {
"use strict";
main.test = function() {
return new Promise(function(resolve, reject) {
setTimeout(function() { resolve(45); }, 5000)
console.log(44);
});
};
})(global);
global.test().then(function(r) {
console.log(r);
});
console.log("start");
在此示例中,输出将为:
start
44
45
是的,你有一个轻微的误解。承诺可以在创建时对同一事件循环时钟周期执行或开始工作,这就是示例所做的。然后它们最终产生事件循环,并且它们的结果保证在起始报价时不会解析或拒绝,总是在之后。
由于 promise 通常用于异步 IO,因此您通常不会注意到在同一刻度中准备工作所花费的时间。例如,构造一个 SQL 查询,然后将其发送到数据库,完成后,解析承诺。但是,在极端情况下,如果你有一个巨大而复杂的SQL查询要通过同步字符串操作构建,它将占用初始时钟周期,直到它最终通过网络发送到数据库,然后代码将继续使用其他时钟周期,最终当响应从数据库到达时,承诺将解析。
相关文章:
- 根据是否解析了 Promise 从函数返回值
- 函数在promise被解析后被调用,但Jasmine未通过测试.为什么?
- AngularJS和promise值在调用本地函数时的效果-未定义
- Promise函数在.then之后未运行函数化
- 如何在异步函数中正确使用Promise.all()和then()
- 函数参数在内部不可见,返回新的Promise(函数(resolve,reject).传递给被promise化的函数的
- 多次调用promise函数,直到另一个promise函数满足条件
- 在循环中调用Bluebird Promise函数
- 如何在循环中调用Promise函数并保存其返回值
- Nodejs 没有异步执行 promise 函数
- NodeJS - 创建一个使用 Sequelize 函数的 Promise 函数
- 如何返回以下 _.map + Promise 函数
- 访问Node.js中其他promise函数中的firebase防火promise局部变量-避免全局
- 在另一个函数中调用promise函数时出错
- 在Nodejs中编写promise函数时,undefined不是函数
- 在AngularJS中创建一个Q promise函数调用阻塞
- 从angular的promise函数中获取数据
- jQuery递归的Promise函数有什么问题?
- Bluebird Promise:在新的Promise(函数(resolve,reject)中可以有多个reject()
- 在Angular 2中,如何从一个Promise函数调用另一个Promise函数