This question already has answers here:
Is there a way to return early in deferred promise?
(2个答案)
3年前关闭。
很难用我能找到的信息来学习如何避免推迟的反花粉。我正在为Nodejs使用Q库。
基本上,我们有可能会读到,我们必须尝试不拒绝或拒绝deferred.reject或deferred.resolve的诺言。
deferred.resolve必须替换为返回语句,因此这一点非常简单。
问题出在我想在函数中使用promise时,在某些情况下这不是应用程序错误,但必须拒绝执行。例如:
哪里
在这种情况下,不可能返回与deferred.promise不同的东西。如果我删除它并返回true,则错误是
如果可能的话,如何在不使用延迟的情况下管理此类代码?谢谢。
此时,假设“ QUERY”是一个异步操作,您将获得一个诺言。因此,您可能无需创建另一个承诺,只需重复使用来自“ QUERY”的那个承诺即可。
或者,如果您需要在“ QUERY”的结果中添加内容,则必须给它回调以在完成时执行。在该回调中,您可以解决或拒绝Promise(
(2个答案)
3年前关闭。
很难用我能找到的信息来学习如何避免推迟的反花粉。我正在为Nodejs使用Q库。
基本上,我们有可能会读到,我们必须尝试不拒绝或拒绝deferred.reject或deferred.resolve的诺言。
deferred.resolve必须替换为返回语句,因此这一点非常简单。
问题出在我想在函数中使用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
未知。如果可能的话,如何在不使用延迟的情况下管理此类代码?谢谢。
最佳答案
isNotForbiddenFieldToUpdate: (fieldsToUpdate,forbiddenFields) => {
var deferred = Q.defer();
//DO A QUERY AND STORE IN result PARAM
此时,假设“ QUERY”是一个异步操作,您将获得一个诺言。因此,您可能无需创建另一个承诺,只需重复使用来自“ QUERY”的那个承诺即可。
return yourAsyncQuery();
或者,如果您需要在“ QUERY”的结果中添加内容,则必须给它回调以在完成时执行。在该回调中,您可以解决或拒绝Promise(
Q
)。 yourAsyncQuery().then(
function(result) {
if (! result)
deferred.reject(new Error('Query is empty.'));
// do more stuff with 'result'.
deferred.resolve(result);
},
function(error) {
deferred.reject(error);
}
);
return deferred.promise;
}
关于javascript - 如何避免延缓反模式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38058048/
10-16 07:53