我调用storage.createTask并使用BlueBird的promise来获取返回的值。这个工作正常,当我做new Promise()
并解决承诺使用resolve(something)
或reject(error)
。但是,Promise.reject(new Error('some error'))
导致cannot read property 'then' of undefined
。新的Promise和Promise.resolve之间的区别/拒绝蓝鸟
根据该文档,Promise.reject
创建一个被拒绝,并给出的理由
的承诺。这不是类似于reject(error)
,它工作正常吗?
Promise.resolve/Promise.reject
和new Promise
有什么区别?我们应该什么时候使用它们?
//server.js
// returning Promise.reject causes
// Cannot read property 'then' of undefined
storage.createTask(task).then(function(id) {
task.id = id;
reply(task);
}, function(error) {
console.log(error);
reply(error);
});
// storage.js
function _create(task) {
return new Promise(function(resolve, reject) {
var id = shortid.generate();
Task.create({
id: id,
content: task.content,
deadline: task.deadline,
milestone_id: task.milestone_id,
}).catch(function (error) {
reject(error); // works ok
}).then(function() {
resolve(id); //works ok
});
});
}
module.exports = {
createTask: function(task) {
if (task.milestone_id != null) {
Milestone.isExist(task.milestone_id).then(function(exists) {
if (!exists) {
return Promise.reject(new Error('some error'));
}
return _create(task);
});
} else {
return _create(task);
}
}
http://stackoverflow.com/questions/23803743/what-is-the-explicit-promise-construction-antipattern-and-how-do-i-avoid-it –
你的'createTask()'函数是否应该因为没有什么东西可以接受你在这个功能中被拒绝的承诺,就像你现在拥有它一样,这是没有意义的。 – jfriend00