首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用angularjs $q顺序链接promises?

如何使用angularjs $q顺序链接promises?
EN

Stack Overflow用户
提问于 2014-09-07 05:06:56
回答 6查看 29.9K关注 0票数 15

在promise库Q中,您可以执行以下操作来按顺序链接promise:

代码语言:javascript
复制
var items = ['one', 'two', 'three'];
var chain = Q();
items.forEach(function (el) {
  chain = chain.then(foo(el));
});
return chain;

但是,以下内容不适用于$q

代码语言:javascript
复制
var items = ['one', 'two', 'three'];
var chain = $q();
items.forEach(function (el) {
  chain = chain.then(foo(el));
});
return chain;
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2014-09-07 05:06:56

只需使用$q.when()函数:

代码语言:javascript
复制
var items = ['one', 'two', 'three'];
var chain = $q.when();
items.forEach(function (el) {
  chain = chain.then(foo(el));
});
return chain;

注意: foo必须是一个工厂,例如

代码语言:javascript
复制
function setTimeoutPromise(ms) {
  var defer = $q.defer();
  setTimeout(defer.resolve, ms);
  return defer.promise;
}

function foo(item, ms) {
  return function() {
    return setTimeoutPromise(ms).then(function () {
      console.log(item);
    });
  };
}

var items = ['one', 'two', 'three'];
var chain = $q.when();
items.forEach(function (el, i) {
  chain = chain.then(foo(el, (items.length - i)*1000));
});
return chain;
票数 33
EN

Stack Overflow用户

发布于 2016-07-22 23:42:39

以一种可能比redgeoff's answer更简单的方式,如果您不需要自动化,您可以结合使用$q.when().then()来链接promises,如this post开头所示。return $q.when() .then(function(){ return promise1; }) .then(function(){ return promise2; });

票数 4
EN

Stack Overflow用户

发布于 2017-03-22 21:08:52

拥有以下内容:

代码语言:javascript
复制
let items = ['one', 'two', 'three'];

一行(3行表示可读性):

代码语言:javascript
复制
return items
    .map(item => foo.bind(null, item))
    .reduce($q.when, $q.resolve());
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25704745

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档