【问题标题】:How do I access the value of a returned promise?如何访问返回的 Promise 的值?
【发布时间】:2017-10-25 07:55:58
【问题描述】:

我确定我错过了一些关于同步性的明显和基本的东西,但我无法理解这应该如何工作......

$scope.foo=[];

getFoo(url) {
  $scope.foo=$http.get(url).then(function (response) {
    var foo = [];
    //process response to get foo array. Console.log returns as expected here.
    return foo;
  });
}

这似乎只是将$scope.foo 设置为promise 对象。我错过了什么?我如何在其余代码中实际使用承诺的结果?

【问题讨论】:

  • 您在 then 回调中访问它,因此将其分配给您的范围。除非您可以使用 await 关键字。 Promise 是异步的,因此您不会返回并期望以同步方式使用该返回值。这只是将一个值返回给下一个链接的 .then。
  • 正如您所写,您已经知道在哪里处理和记录响应。有什么问题?
  • $scope.foo 是另一个承诺,所以等待它:$scope.foo.then(…)
  • response 是 get(url) 返回的数据。我也没有看到问题。 return response; 可能就是你想要的...
  • 你是对的,$scope.foo=$http.get(url).then(...)$scope.foo 设置为promise 对象,你不需要从你的回调中返回,异步代码不会在这个意义上返回回调的返回值,这就是存在回调的原因:用那里的值做一些事情。尝试设置$scope.foo = response.data; 看看它是如何工作的

标签: javascript asynchronous promise angular-promise


【解决方案1】:

而不是returning foo,您需要在回调中移动赋值:

getFoo(url) {
  $http.get(url).then(function (response) {
    var foo = [];
    // process response to get foo array...
    $scope.foo = foo;
  });
}

使用 Promise,return 回调的值 .then() 将仅在它们链接在一起时可用于另一个 .then() 回调:

$http.get(url).then(function (response) {
  var foo = [];
  // process response to get foo array...
  return foo;
}).then(function (foo) {
  $scope.foo = foo;
});

【讨论】:

    猜你喜欢
    • 2020-05-26
    • 2022-01-04
    • 1970-01-01
    • 1970-01-01
    • 2018-09-16
    • 1970-01-01
    • 2019-04-25
    • 1970-01-01
    • 2020-12-16
    相关资源
    最近更新 更多