javascript - Angular 服务的返回 promise

标签 javascript angularjs angular-services

我有一项服务(当一切都说完了)更新数据库上的值。

我想根据结果(成功/失败)更新 View 范围,但当然服务使用的http请求是异步的,因此返回值不会立即可用,并且在 Controller 中未定义。

如果我在 Controller 内发出http请求,我会更新回调函数内的范围,但因为我使用服务,所以范围的嗯...范围(?)对其不可用。

我认为 Promise 是我需要返回的,但也许有更简单的东西。

服务

.service('doStuff',function($http){

    this.update = function(data) {

        $http.post('http://api.internet', data).then(function(res){ 

            return(res.data.result);

        });  

    }

})

Controller

/* service is injected into controller etc. */

var result = doStuff.update(data);

p(result); // undefined (as expected)

我想既然我从http回调返回,它会在返回之前等待结果可用,但我猜我错过了一些东西。

最佳答案

由于 $http 始终是异步的,因此您无法在回调函数中返回任何内容。就等于什么都不归还。

您需要做的是返回 $http Promise,然后在 Controller 中处理回调函数。

服务:

.service('doStuff', function($http) {
  this.update = function(data) {
    return $http.post('http://api.internet', data);
  }
})

Controller :

doStuff.update(data).then(function(result){
  p(result);
});

关于javascript - Angular 服务的返回 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41668352/

相关文章:

angular - 在 Angular 2 中映射 http 响应时获取 [object Object]

javascript - 如何去除 Javascript (json) 中的斜杠?任何 JQuery 插件?

javascript - jQuery 返回 ID 以某个字符串开头的元素

Angular 包在组件内部使用自己的服务

angularjs - 将当前范围传递给 AngularJS 服务

javascript - 如何在 create()、update() 上从 angularjs-rails-resource 获得确认或回调

javascript - 无论类型是否正确,PropTypes 都会出错

javascript - 在 jQuery 工具提示插件中添加新行

javascript - 如何使用 ng-options AngularJS 将输入字段添加到特定选择字段?

javascript - 如何在 ng-repeat 中制作选定行的数组?