2017-06-17 5 views
0

Ich habe 3 Abfragen (bigquery), die asynchron ausgeführt werden müssen, aber mein weiterer Funktionsaufruf hängt von der Bedingung ab, dass alle 3 Abfragen ausgeführt wurden. Wie würde ich einen richtigen Arbeitscode dafür schreiben?Einen Codeblock synchron ausführen, Inhalt muss jedoch asynchron ausgeführt werden

hier ist mein Demo-Code:

var flag = 0; 
var defer = q.defer(); 
var defer2 = q.defer() 
function promiseMeSomething() { 
    var x =level2Queries() 
    x.then(function SuccessPromise(input) { 
     if (input == 3) 
      defer.resolve(input); 
     else 
      defer.reject('Flag not set because value of flag is '+input); 
    }, function (err) { 
     console.error('Fail bro! ' + err) 
    }) 


    console.log(defer.promise) 
    return defer.promise; 


} 

function level2Queries() { 

    q.fcall(bigquery.query(sqlQuery7).then(function Success() { 
    flag++ 
}), 
bigquery.query(sqlQuery8).then(function Success() { 
    flag++ 
}), 
bigquery.query(sqlQuery9).then(function Success() { 
    flag++ 
}) 
) 
defer2.resolve(flag); 
return defer2.promise 
} 


var outputPromise = promiseMeSomething(); 
outputPromise.then(function (input) { 
console.log(outputPromise) 
}, function (input) { 
console.log(outputPromise) 
}) 
+0

ich denke, die Funktion "alle" genannt wird. Es bedeutet, dass alle Versprechen erfüllt werden müssen, bevor es zurückkehrt – toddmo

Antwort

Verwandte Themen