节点7.1.0新Promise()解析器undefined不是一个函数

时间:2016-11-12 10:29:09

标签: node.js promise

我在OSX上使用最新的节点版本7.1.0,但我仍然无法使用Promises。我得到了

index.js

new Promise();

错误:

new Promise();
             ^
     

TypeError:Promise resolver undefined不是函数

节点7.1.0不支持ES6和Promise吗?

3 个答案:

答案 0 :(得分:20)

promises的API要求您将函数传递给promise构造函数。引用MDN

  

new Promise(/ * executor * / function(resolve,reject){...});

     

executor - 使用参数resolve和reject传递的函数。执行函数由Promise实现立即执行,传递resolve和reject函数(在Promise构造函数甚至返回创建的对象之前调用执行程序)。调用时,resolve和reject函数分别解析或拒绝promise。执行程序通常启动一些异步工作,然后,一旦完成,调用resolve或reject函数来解析promise,否则在发生错误时拒绝它。

您可以看到this answer的使用示例。

节点7.1支持承诺。

答案 1 :(得分:16)

您必须向Promise构造函数提供回调,以便它在解析或拒绝操作时知道该怎么做。

例如:

var p = new Promise((resolve, reject) => { 
    setTimeout(() => {
        resolve();
    }, 5000);
});

p.then(() => {
    console.log("Got it");
})

5秒后,您将在控制台中看到消息Got it

Promise有一个非常好的库:Bluebird

同时查看MDN文档。

我喜欢Google developers中的这篇文章。

答案 2 :(得分:0)

如果不提供某些参数,则无法以这种方式创建新的Promise。不过,您可以使用undefined来创建一个可以解析为Promise.resolve()的承诺。