Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 在执行了几个其他函数之后,是否使用$q执行一个函数?_Angularjs_Angular Promise - Fatal编程技术网

Angularjs 在执行了几个其他函数之后,是否使用$q执行一个函数?

Angularjs 在执行了几个其他函数之后,是否使用$q执行一个函数?,angularjs,angular-promise,Angularjs,Angular Promise,我能找到的所有关于$q.All()的教程都涉及到创建$q.defer()s并将它们传递给承诺的数组,然后调用$q.All(promies) 我的问题是,如果我想让一个函数在其他函数执行并解决之后执行,该怎么办?例如,我希望D在A、B和C运行之后运行 但关键是,它们是独立的函数,不在同一块中 例如: var func1 = function(){ var deferred = $q.defer(); // do stuff if (successful){

我能找到的所有关于
$q.All()
的教程都涉及到创建
$q.defer()
s并将它们传递给
承诺的数组,然后调用
$q.All(promies)

我的问题是,如果我想让一个函数在其他函数执行并解决之后执行,该怎么办?例如,我希望
D
A
B
C
运行之后运行

但关键是,它们是独立的函数,不在同一块中

例如:

var func1 = function(){
     var deferred = $q.defer();
     // do stuff
     if (successful){
         deferred.resolve("success");
     return deferred;
}
var func2 = function(){
     var deferred = $q.defer();
     // do stuff
     if (successful){
         deferred.resolve("success");
     return deferred;
}
var func3 = function(){
     var deferred = $q.defer();
     // do stuff
     if (successful){
         deferred.resolve("success");
     return deferred;
}

    var theMainFunction = function(){
        var promises = [];
        promises.push(func1);
        promises.push(func2);
        promises.push(func3);
        $q.all(promises).then(function(){
          //do cool stuff
        });
}

我怎样才能让它工作呢?

这里有一个示例代码,附加所有承诺,然后连续执行它们,等待它们的返回,如果所有返回都完成了,请解决最后一个

var deferred = $q.defer();

    var broadcastArr = [];


            broadcastArr.push(func);
            broadcastArr.push(func2);
            broadcastArr.push(func3);


    var broadcastPromises = 0;
    for (var i = 0; i < broadcastArr.length; i++) {
        var returnedPromise = broadcastArr[i].callback();
        if (returnedPromise && returnedPromise.hasOwnProperty("then") === true) {

            //promise returned
            returnedPromise.then(function () {
                broadcastPromises += 1;
                if (broadcastPromises === broadcastArr.length) {
                    //All broadcasts recieved, callback now.
                    console.log("Broadcast finished");
                    deferred.resolve();
                }
            });
        } else {
            //No promise - count up
            broadcastPromises += 1;
            if (broadcastPromises === broadcastArr.length) {
                //All broadcasts recieved, callback now.
                //Maybe we just got no promises back, for take sure, do a timeout so we'll resolve.
                $timeout(function () {
                   console.log("Broadcast finished");
                    deferred.resolve();
                });
            }
        }
    }

    if (broadcastArr.length === 0) {
        //Reslove immediately
        $timeout(function () {

            console.log("No broadcasts attached");
            deferred.resolve();
        });
    }
    return deferred.promise;
var deferred=$q.deferred();
var-arr=[];
广播发射推送(func);
广播arr.push(功能2);
广播arr.push(功能3);
var=0;
对于(变量i=0;i
根据您给出的示例,您只需稍微更改“theMainFunction”:

var func1 = function(){
     var deferred = $q.defer();
     // do stuff
     if (successful){
         deferred.resolve("success");
     return deferred;
}
var func2 = function(){
     var deferred = $q.defer();
     // do stuff
     if (successful){
         deferred.resolve("success");
     return deferred;
}
var func3 = function(){
     var deferred = $q.defer();
     // do stuff
     if (successful){
         deferred.resolve("success");
     return deferred;
}

var theMainFunction = function(){
    var promises = [];
    promises.push(func1().promise);
    promises.push(func2().promise);
    promises.push(func3().promise);
    $q.all(promises).then(function(){
      //do cool stuff
    });
}

这里有一个jsFiddle可以使用它:

你可以提供一些代码/伪代码来说明这些函数的结构/位置吗?@MathewBerg我添加了一些代码,希望能更好地解释我的困境。我已经用我自己的逻辑做了同样的事情。我调用所有附加到resolve事件的函数,并计算每个应返回的承诺的数量;topromises.push(func1());对于所有函数,它都应该完全满足您的要求(现在您正在等待函数对象被解析。因为它不是承诺,所以它会立即被解析。)