我开始使用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