Javascript 如何多次解析Q延迟对象,即按步骤进行解析?
我有一个函数流,其中一个(第一个函数)是异步的,并返回一个承诺。此函数调用其他异步函数(Javascript 如何多次解析Q延迟对象,即按步骤进行解析?,javascript,asynchronous,q,Javascript,Asynchronous,Q,我有一个函数流,其中一个(第一个函数)是异步的,并返回一个承诺。此函数调用其他异步函数(nestedAssyncFunction.*)。当第一个函数及其所有嵌套函数返回时,必须调用第二个函数。因此,我需要在几个地方解析延迟对象(在三个嵌套函数的示例中) 所以我的主要问题是:如何通过几个步骤解决延迟问题 到目前为止,我发现我可以从多个地方调用notify方法,并在其处理程序中解析主要的延迟对象。像这样: var deferred = Q.defer(); deferred.progressCoun
nestedAssyncFunction.*
)。当第一个函数及其所有嵌套函数返回时,必须调用第二个函数。因此,我需要在几个地方解析延迟对象(在三个嵌套函数的示例中)
所以我的主要问题是:如何通过几个步骤解决延迟问题
到目前为止,我发现我可以从多个地方调用notify
方法,并在其处理程序中解析主要的延迟对象。像这样:
var deferred = Q.defer();
deferred.progressCounter = 0;
first().then(second, undefined, notifyHandler);
function notifyHandler() {
deferred.progressCounter++;
if (deferred.progressCounter === 3) {
deferred.resolve();
}
}
function nestedAssyncFunction_1() {
// some actions
deferred.notify();
}
但是我的问题是:向延迟对象添加自定义属性的最佳方法是什么?
因为这样做似乎是不高兴的,就像上面的例子
我的感谢。这根本不是你想要的 你想要什么:
Q.all([
nestedAssyncFunction_1(),
nestedAssyncFunction_2(),
nestedAssyncFunction_3()
]).then(function(){
//All done
});
那根本不是你想要的 你想要什么:
Q.all([
nestedAssyncFunction_1(),
nestedAssyncFunction_2(),
nestedAssyncFunction_3()
]).then(function(){
//All done
});
你可以这样做:
function first() {
//All you nested functions have to return a promise
var promises = [];
promises.push(nestedAssyncFunction_1());
promises.push(nestedAssyncFunction_2());
promises.push(nestedAssyncFunction_3());
var deferred = Q.defer();
Q.all(promises).then(function(){
//do some tasks after all promises are resolve.
deferred.resolve(); //resolve deferred objects when all promises are resolved.
});
return deferred.promise;
}
function second() {
// some actions
}
first().then(second);
或此解决方案(根据您的需要,您可以选择此解决方案或第一个解决方案):
链接如下功能:
function first() {
//All you nested functions have to return a promise
var promises = [];
promises.push(nestedAssyncFunction_1());
promises.push(nestedAssyncFunction_2());
promises.push(nestedAssyncFunction_3());
var deferred = Q.defer();
Q.all(promises).then(function(){
//do some tasks after all promises are resolve.
deferred.resolve(); //resolve deferred objects when all promises are resolved.
});
return deferred.promise;
}
function second() {
// some actions
}
first().then(second);
你可以这样做:
function first() {
//All you nested functions have to return a promise
var promises = [];
promises.push(nestedAssyncFunction_1());
promises.push(nestedAssyncFunction_2());
promises.push(nestedAssyncFunction_3());
var deferred = Q.defer();
Q.all(promises).then(function(){
//do some tasks after all promises are resolve.
deferred.resolve(); //resolve deferred objects when all promises are resolved.
});
return deferred.promise;
}
function second() {
// some actions
}
first().then(second);
或此解决方案(根据您的需要,您可以选择此解决方案或第一个解决方案):
链接如下功能:
function first() {
//All you nested functions have to return a promise
var promises = [];
promises.push(nestedAssyncFunction_1());
promises.push(nestedAssyncFunction_2());
promises.push(nestedAssyncFunction_3());
var deferred = Q.defer();
Q.all(promises).then(function(){
//do some tasks after all promises are resolve.
deferred.resolve(); //resolve deferred objects when all promises are resolved.
});
return deferred.promise;
}
function second() {
// some actions
}
first().then(second);