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);