我想创建一个返回promise的函数。该promise将包含函数中进行的异步调用的数据。我希望它看起来像:
//Function that do asynchronous work
function f1() {
var url = ...
WinJS.xhr({ url: url }).then(
function completed(request) {
var data = ...processing the request...
...
},
function error(request) {
...
});
}
//Code that would use the result of the asynchronous function
f1().done(function(data) {
...
});
我发现这项工作的唯一方法是将回调传递给f1并在拥有数据时调用它。虽然使用回调似乎打败了承诺所实现的目标。有没有办法使它像上面一样工作?另外,我可以在f1中返回WinJS.xhr,但是f1的done方法将返回请求而不是“数据”。
答案 0 :(得分:2)
几乎无法改变:
function f1() {
var url = …;
return WinJS.xhr({ url: url }).then(function completed(request) {
// ^^^^^^
var data = …; // processing the request
return data;
// ^^^^^^^^^^^
});
}
//Code that would use the result of the asynchronous function
f1().done(function(data) {
…
}, function error(request) {
… // better handle errors in the end
});
您确实不希望返回WinJS.xhr()
本身,但是您希望返回.then(…)
调用的结果,这正是使用回调的返回值解析的承诺。这是the main features of promises之一: - )