在 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/