Я начал использовать функцию ES7 async/await
, которая дает лучший подход к решению асинхронных задач и делает ваш код более чистым и читаемым.
Однако он не дает вам доступа к обещанию, созданному функцией async, поэтому, если вы выполняете какой-либо асинхронный запрос в своей функции async, вы должны обещать его, затем дождаться его и затем вернуть результат. Я имею в виду это:
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, что делает ваш код полностью сфокусированным на задаче без чего-либо другого.
result = await $.get(someUrl); doStuffWith(result)
недостаточно? Весь смысл предложения не в том, чтобы иметь дело с обратными вызовами. - person Amadan   schedule 09.11.2016