Как сделать цепочку из двух асинхронных вызовов JQuery с помощью JS Promises, избегая при этом пирамиды гибели? Я знаю, что могу преобразовать обещание "JQuery" в реальное обещание следующим образом:
Promise.resolve($.getJSON(url, params));
Если я просто хочу дождаться одного обещания, я могу сделать это:
Promise.resolve($.getJSON(url1, params1))
.then(function(result){
// do stuff
});
Если я хочу дождаться выполнения двух разных вызовов ajax, я могу сделать это:
Promise.all(
[
Promise.resolve($.getJSON(url1, params1)),
Promise.resolve($.getJSON(url2, params2))
]).then(function(results_array){
// do stuff
});
Однако, если я хочу, чтобы один вызов следовал за другим, это не сработает:
Promise.resolve($.getJSON(url1, params1))
.then(function(result){
//do stuff
return Promise.resolve($.getJSON(url2, params2));
}).then(function(result){
//result is a promise, not the results from the second call to getJSON()...
//and it doesn't even wait for the second call to finish.
//result.then() is just going to bring me further into the pyramid of doom :(
});
Каким-то образом я хочу вызвать .then() для обещания, созданного в функции «делать вещи». Какой идиоматический способ сделать это?
result
- person hazzik   schedule 09.07.2015