new Promise和Promise的区别.在bluebird中解决/拒绝
Difference between new Promise and Promise.resolve/reject in bluebird
我调用存储。并使用BlueBird的promise来获取返回值。当我做new Promise()
并使用resolve(something)
或reject(error)
解决承诺时,这工作得很好。Promise.reject(new Error('some error'))
引起cannot read property 'then' of undefined
。
根据文档,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);
}
}
你的createTask()
函数没有返回任何东西;您需要返回由Milestone.isExist()
创建的承诺。
下面是我如何重写这个函数:
createTask: function(task) {
if (task.milestone_id == null ) {
return Promise.reject(new Error('null id'));
}
return Milestone.isExist(task.milestone_id).then(function(exists) {
if (!exists) {
return Promise.reject(new Error('some error'));
}
return _create(task);
});
}
通过这个重写,你总是从createTask()
返回一个承诺,所以你可以安全地链接它。
相关文章:
- 使用promise和mongoose对文档进行排序
- 如何解决Yii中的页面刷新问题
- 测试Angular Service解决错误回调中的promise
- 节点协同与生成器和Promise并行流量控制
- 如何解决Access Control Allow Origin错误
- 在ES6 Promise中,我应该在解决/拒绝之前使用return吗
- AngularJS promise在加载数据之前得到解决
- addAssociation上的Promise是用源代码的陈旧版本解决的
- 为什么 Promise.all(array) 没有立即解决
- 承诺的解决顺序是否与Promise.sexel中提到的顺序相同
- AngularJS/Karma-测试函数返回已解决或拒绝的promise
- promise甚至在调用.resolve()之前就得到了解决
- Selenium Webdriver JavaScript: Promise似乎没有得到解决
- new Promise和Promise的区别.在bluebird中解决/拒绝
- Reactjs的render()在promise解决这个问题后不会被触发.setState被重新分配
- 在promise解决后解析值
- WebCrypto:Safari无法导出密钥(),并且promise似乎永远不会解决/失败
- deffered对象如何通知其promise它已被解决
- JavaScript Promise在解决问题时陷入困境
- 只保留解决并忽略被拒绝的promise中的值