【发布时间】:2016-06-27 23:50:55
【问题描述】:
很难用我能找到的信息来学习如何避免延迟的反模式。我正在为 Nodejs 使用 Q 库。
由于可以阅读,基本上,我们必须尽量不拒绝或回答带有 deferred.reject 或 deferred.resolve 的承诺。
deferred.resolve 必须替换为 return 语句,所以这一点很简单。
当我想在函数中使用 promise 时,问题就出现了,该函数在某些不是应用程序错误的情况下必须拒绝执行。例如:
Services.data.isNotForbiddenFieldToUpdate(bodyKeys,forbidden)
.then(() => console.log('Finish'))
在哪里
isNotForbiddenFieldToUpdate: (fieldsToUpdate,forbiddenFields) => {
var deferred = Q.defer();
//DO A QUERY AND STORE IN result PARAM
if(err) deferred.reject(err)
else if(! result) deferred.reject(new Error('Query is empty.'));
else deferred,resolve();
return deferred.promise;
}
在这种情况下,不可能返回与 deferred.promise 不同的东西。如果我删除它并返回 true,则错误是 then 未知。
如果可能,我如何在不使用 deferred 的情况下管理这种代码?谢谢。
【问题讨论】:
-
查询是异步操作吗?如果是这样,那么您通过返回一个承诺来做正确的事情。否则,不要返回承诺。
-
您能否明确说明您引用的延迟反模式?我真的很好奇你想避免什么。 Promise 是避免回调地狱的工具。
标签: javascript node.js promise q