- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在使用 $q 的 AngularJS 实现。
给定以下功能:
doTask1: function ($scope) {
var defer = $q.defer();
$http.get('/abc')
.success(function (data) {
defer.resolve();
})
.error(function () {
defer.reject();
});
return defer.promise;
},
doTask2: function ($scope) {
var defer = $q.defer();
var x = 99;
return defer.promise;
},
我知道我可以像这样延迟执行另一个函数:
os.doTask1()
.then(function () {
doTask3();
});
我想同时启动 doTask1 和 doTask2。有没有办法我可以做到这一点并仍然延迟执行,以便doTask3() 在 doTask1 和 doTask2 结束之前不会执行成功。
最佳答案
$q.all
就是您要找的。 ( Documentation )
$q.all
采用数组或对象形式的多个 promise ,并返回一个全新的 promise ,当所有传入的 promise 都得到解决时,该 promise 将得到解决。如果您传入一组 promise ,则新 promise 将使用与这些 promise 相对应的一组值进行解析:
$q.all([doTask1(), doTask2()]).then(function(results) {
// results[0] == result of doTask1
// results[1] == result of doTask2
doTask3();
});
如果你传入一个键- promise 对的对象,它将被一个对象解析,该对象的键与你传入的对象匹配,每个值都很好地对应于该键的已解析 promise 的值:
$q.all({one: doTask1(), two: doTask2()}).then(function(results) {
// results.one == result of doTask1
// results.two == result of doTask1
doTask3();
});
由于 promise 链(例如,当您从 then
函数返回一个 promise 时,它会创建一个新的 promise,解析为您返回的 promise 的解析值),您可以做一些很酷的事情东西:
var bothPromises = $q.all([doTask1(), doTask2()]);
var task3Promise = bothPromises.then(function(results) {
var result1 = results[0];
var result2 = results[1];
return doTask3(result1, result2);
});
task3Promise.then(function(resultOfDoTask3) { ... });
毫无值(value)的是,如果传递给 $q.all
的任何 promise 被拒绝,则返回的 promise 也将被拒绝。参见 the Angular $q
documentation获取更多信息。
这(几乎)与问题无关,但我认为这是一个巧妙的技巧:如果您碰巧使用 CoffeeScript,则可以使用解构来获得 promise 的已解析值。
对于数组:
$q.all([doTask1(), doTask2()]).then ([result1, result2]) ->
# ...
对于对象
$q.all(one: doTask1(), two: doTask2()).then ({one, two}) ->
# note that you have to use the same key names
# as in the object you passed to `$q.all`
关于javascript - 我怎样才能延迟一个函数的执行,直到其他两个使用 $q 完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21772454/
我需要在 JavaScript 中的笛卡尔坐标和球坐标之间进行转换。我在论坛上浏览了一下,没有找到我要找的东西。 现在我有这个: this.rho = sqrt((x*x) + (y*y) + (z*
有没有matrix3d可以像这样把矩形变成梯形的?我知道常规的 2d 矩阵变换只能以平行四边形结束,因为您只能有效地倾斜和旋转。 div { width: 300px; height:
关于这个例子(d3.j radial tree node links different sizes),我想知道是否可以在 d3.js 中混合径向树和直线树。 对于我的 jsFiddle 示例:htt
我尽量把标题写得最好,但我不确定如何准确描述这里发生的事情,所以请随时更正。 我想使用 › 直 Angular 引号 (›) 而不是 > 直 Angular 引号 (>),虽然 › 字符比 > 短,但
我正在尝试使用 CSS 创建一个具有圆边的矩形棱柱,如下图所示。 到目前为止,我已经指定了顶部和底部的边界半径。问题是我不知道如何让另一边的左右边缘向内 curl 。因此,拐 Angular 处不应有
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 去年关闭。 社区去年审查了是否重
首先,我刚刚开始学习 HTML 和 CSS。 我想如何使用这段代码: https://codepen.io/martinjkelly/pen/vEOBvL .container { width:
我是一名优秀的程序员,十分优秀!