我在OSX上使用最新的节点版本7.1.0,但我仍然无法使用Promises。我得到了
index.js
new Promise();
错误:
new Promise(); ^
TypeError:Promise resolver undefined不是函数
节点7.1.0不支持ES6和Promise吗?
答案 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()
的承诺。