WinJS:从函数中返回承诺

时间:2016-03-21 14:10:54

标签: javascript asynchronous promise winjs winjs-promise

我想创建一个返回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方法将返回请求而不是“数据”。

1 个答案:

答案 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之一: - )