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());对于所有函数,它都应该完全满足您的要求(现在您正在等待函数对象被解析。因为它不是承诺,所以它会立即被解析。)