我開始使用ES7功能async/await
,這給處理異步任務的最佳方法,使你的代碼更加清晰易讀。是否有可能解決異步函數沒有return關鍵字
但是,它不會讓您訪問由異步函數創建的Promise,因此如果您在異步函數中執行了一些異步請求,您應該對它進行promisify,然後等待它,然後返回結果。我的意思是這樣的:
async function doStuff() {
//stuff...
var value = await new Promise(function(resolve) {
$.get('http://some/url/...', function(result) {
// stuff...
resolve(result);
});
});
return value;
}
如果你能找到什麼指針由函數創建的承諾讓你的代碼可能是這樣的:
async function doStuff() {
//stuff...
var p = arguments.callee.promise;
$.get('http://some/url/...', function(result) {
// stuff...
p.resolve(result);
});
}
甚至:
async function doStuff() {
//stuff...
$.get('http://some/url/...', function(result) {
// stuff...
async.resolve(result);
});
}
這樣你不需要直接訪問Promises API,這使得你的代碼完全專注於任務,而沒有任何其他。
我在想你錯過了'async' /'await'這一點。你可以產生一個場景,只需要執行'result = await $ .get(someUrl); doStuffWith(結果)'是不夠的?該提案的重點不在於處理回調。 – Amadan
我只是想,如果你是在已經承諾爲什麼你需要創建另一個。 Bergi下面的回答很清楚 - 號碼=) – rokstar