如何触发一个承诺,然后触发第二个承诺,$q

How to trigger a promise and then a second one with $q?

本文关键字:承诺 第二个 何触发 一个承诺 然后      更新时间:2023-09-26

我在方法中使用$q来获取对象数组。我还有一种叫做getItems的方法,它利用了这个承诺(all)。

我在底部第二次使用all,用$scope.list做事。代码必须包装在all().then(function() { ... }内,因此它仅在$scope.list准备就绪时才触发。

var all = function() { return $q.all([service.getAllItems()]) }
var getItems = function() {
  all().then(function(value) {
     $scope.list = JSON.parse(value)
  }, function(reason) {
    $scope.result = reason
  })
}
getItems()
all().then(function() {
  // do stuff with $scope.list
}

这行得通...几乎。有时第一个all首先完成,有时第二个完成。所以有时$scope.list有对象,有时它是空的。

如何创建一个仅在all获取对象数组时触发的新承诺?

你可以这样做:

var all = function() { return $q.all([service.getAllItems()]) }
var getItems = function() {
  return all().then(function(value) {
     $scope.list = JSON.parse(value)
  }, function(reason) {
    $scope.result = reason
  });
}
getItems().then(function() {
  // do stuff with $scope.list
}

如果你在一个函数中返回一个承诺,你可以将一个.then链接到它,所以现在你的getItems将从all()返回承诺,一旦实现,你的代码将继续