javascript - Angular : Is this the correct way to chain promises?

标签 javascript angularjs promise chaining angular-promise

我有一个调用另一个函数 moreFoo 的函数 foo,我想将函数调用包装在 promise 中,以便 foo 返回的 promise > 在 moreFoo 解决后返回。这是我的解决方案:

function foo() {
  var defer = $q.defer();
  console.log('doing foo');
  moreFoo().then(defer.resolve);
  return defer.promise;
}

function moreFoo() {
  var defer = $q.defer();
  setTimeout(function() {
    console.log('doing more foo');
    defer.resolve();
  }, 2000);
  return defer.promise;
}

foo().then(function() {
  console.log('finished with all foos');
});

然后输出:

doing foo
doing more foo
finished with all foos

它似乎按预期工作。这是链接这些 promise 的正确/最佳方式吗?

最佳答案

我不知道“最佳”是什么,但这可以通过利用 $timeout 它返回的 promise 来简化很多......

function foo() {
  console.log('doing foo');
  return moreFoo();
}

function moreFoo() {
  return $timeout(function() {
    console.log('doing more foo');
  }, 2000);
}

foo().then(function() {
  console.log('finished with all foos');
});

关于javascript - Angular : Is this the correct way to chain promises?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24770121/

相关文章:

javascript - 暂停视频和切换按钮

javascript - AngularJS 更新 JSON 文件

angularjs - 基于字符数的 Angular 条件类

javascript - .then()方法返回的promise中 promise 了什么?

javascript - 将 [object HTMLElement] 格式化为变量字符串

javascript - 通过 Ajax 将 php DateTime 对象传递给 javascript

javascript - 在 java 脚本中的 setTimeout 方法内调用 setInterval 函数获取 setInterval(...) 不是函数错误

angularjs - angular karma runner 无限期挂起

javascript - angularjs $q 按顺序运行多个 Promise

promise - 使用 Sequelize findOne 方法在 Bluebird promise 中进行并发调用。返回未定义