javascript - 使用 Promise 异步设置变量并避免回调

标签 javascript angularjs promise

在 Angular(和其他 JavaScript 框架)中,使用 Promise 异步检索来自 http 请求的数据,并可以使用回调将其设置为变量。够简单的。但我厌倦了编写如下所示的代码:

service.getWidgetsAsync(function (result) { vm.widgets = result.data });

有什么方法是我没有想到的,可以将上面的内容写得更像这样......?

vm.widgets = service.getWidgetsAsync();

“不”可能是一个有效的答案。 :-)

(为了澄清而添加的 getWidgetsAsync 示例:)

function getWidgetsAsync(callback) {
    $http.get(APPBASEURL + 'Foo/GetWidgets')
        .then(function(result) {
            callback(result);
        });
}

最佳答案

问题是,你通过回调来违背了 promise 的全部意义。返回 promise 而不是使用它来调用回调:

function getWidgetsAsync() {
    return $http.get(APPBASEURL + 'Foo/GetWidgets');
}

然后你可以编写这样的代码:

service.getWidgetsAsync()
.then(function (result) {
    vm.widgets = result.data;
    // do more stuff with vm.widgets
})
.then(/* do other things after the function above is done */);

您的问题的答案是否定的,您不能在调用异步操作后立即使用它的结果。如果可以的话,它就不会是异步的。

关于javascript - 使用 Promise 异步设置变量并避免回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26166688/

相关文章:

javascript - 如何获取自定义 mvc3 属性以验证客户端

javascript - AngularJS:将加载器元素添加到 DOM 顶部

javascript - 如何处理使用 promise 递归读取目录树

javascript - 更改 div 后 Droppable 不会触发

javascript - Knockout映射插件[create,update]: objects created,无法更新

javascript - Angularjs:如何在输入时使输入[文本] ngModel延迟值

javascript - AngularJS $http.get 返回未定义且 $http() 不是函数

javascript - 如何跨多个函数处理 Promise?

Javascript promise 返回意外的 token 错误

javascript - 在 Angular js 应用程序中实现甘特图的最有效方法是什么?