2016-03-21 11 views
0

約束を返す関数を作りたいと思います。この約束は、関数内で行われた非同期呼び出しのデータを含みます。私はそれが見えるようにしたい:私はこの仕事をするために見つけWinJS:関数から約束を返す

//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メソッドは "data"ではなく要求を返します。

答えて

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の1つです:-)

関連する問題