Nodejs没有异步执行promise函数

cyt*_*nox 1 javascript asynchronous node.js promise

我写了一个小例子来学习如何使用Promises.我希望脚本启动并立即输出"start",几秒钟后输出"45".但是,在没有任何输出的情况下,脚本会启动,在退出之前,两行都会打印出来.我误解了Promises是如何工作的还是有缓冲问题?

;(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");
Run Code Online (Sandbox Code Playgroud)

$ node -v v0.12.6

mik*_*rey 6

在promise中包装代码不会使其异步执行.它使得使用异步代码更容易.

在您的示例中,您的循环同步执行.以下是您使用的示例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");
Run Code Online (Sandbox Code Playgroud)

在此示例中,输出将为:

start
44
45
Run Code Online (Sandbox Code Playgroud)