【问题标题】:why the function is not waiting until promise is resolved?为什么函数不等到承诺解决?
【发布时间】:2016-03-15 13:31:16
【问题描述】:

如果 http 承诺已解决,我将使用下面的代码从方法返回字符串,但控制不会等到承诺返回,并且我看到返回对象是 switch 中的方法方法。谁能告诉我什么我在这里做错了!

控制器有以下逻辑:

var status=function(action){
switch(action)
{
case 'create':
                return $scope.submitdata();
                break;
default: alert();
}

$scope.submitdata=function()
{
service.postdata($scope.formdata)
    .success(function(data){
     $scope.response=data;
       return 'SUCCESS';
     })
    .error(function(error){
          Console.log(error);
          return 'FAILURE';
     })

}

服务方式:

this.postdata=function(data){
return $http.post(URL,DATA);
}

【问题讨论】:

  • 你不能从异步回调函数返回值...你需要使用基于回调的处理
  • 如果您使用 promise API,那么您可以使用 then 函数链接结果。或者你可以试试回调模式。
  • Postdata 是如何使用的?
  • 你最好的选择可能是返回承诺,因为它是异步的,所以你不能只返回它的结果,但你可以设置函数返回承诺并在以后的代码中解决承诺.

标签: javascript angularjs angular-promise


【解决方案1】:

.success.error 方法忽略返回值。

参数值也区分大小写

this.postdata=function(data){
    //THIS
    return $http.post(URL,data);
    //return $http.post(URL,DATA);
}

弃用通知1

$http 旧承诺方法 .success.error 已被弃用。请改用标准的.then 方法。


$scope.submitdataPromise = function() {
    return service.postdata($scope.formdata);
});

$scope.submitdataPromise
  .then(function onFulfilled(response){
    $scope.data = response.data;
    //return data for chaining
    return data;
}).catch(function onRejected(response){
    console.log(response.status);
    //throw to chain error
    throw response;
});

submitdataPromise 函数立即返回一个promise。 Promise 是 XHR 的 future 结果的容器,无论是已完成还是已被拒绝。可以通过向$q 服务注册函数来检索这些结果,以便在解析时调用。

响应对象具有以下属性:

  • data – {string|Object} – 使用转换函数转换的响应正文。
  • status – {number} – 响应的 HTTP 状态代码。
  • headers – {function([headerName])} – Header getter 函数。
  • config – {Object} – 用于生成请求的配置对象。
  • statusText – {string} – 响应的 HTTP 状态文本。

200 到 299 之间的响应状态代码被视为成功状态,将导致调用成功回调。请注意,如果响应是重定向,则 XMLHttpRequest 将透明地跟随它,这意味着不会为此类响应调用错误回调。

-- AngularJS $http Service API Reference - General Usage

【讨论】:

  • 感谢您的回复。我尝试在控制器中使用 then 而不是成功,但看到了类似的行为,所以想知道您是否可以提供一些示例代码 sn-p!!
猜你喜欢
  • 2019-04-29
  • 1970-01-01
  • 1970-01-01
  • 2022-01-09
  • 1970-01-01
  • 1970-01-01
  • 2019-05-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多