Я читаю эту статью, и раздел по абстракции обещания кажется немногим чрезмерно сложным мне. Следующее дано как пример:
requestSomeData("http://example.com/foo") // returns a promise for the response
.then(function(response){ // ‘then’ is used to provide a promise handler
return JSON.parse(response.body); // parse the body
}) // returns a promise for the parsed body
.then(function(data){
return data.price; // get the price
}) // returns a promise for the price
.then(function(price){ // print out the price when it is fulfilled
print("The price is " + price);
});
Мне кажется, что следующее могло предоставить тому же результату меньше строк кода:
requestSomeData("http://example.com/foo")
.requestHandler(function(response){
// parse the body
var data = JSON.parse(response.body);
// get the price
var price = data.price;
// print out the price
print("The price is " + price);
});
Пока правда, что оба в конечном итоге будут выполнять то же самое, разница состоит в том, что ваш второй пример не асинхронно. Например, подумайте о том, что произойдет, если json.parse (...)
оказывается чрезвычайно дорогой операцией; Вам придется повесить до тех пор, пока все не закончится, что не всегда может быть то, что вы хотите.
Это то, что обещания получают вас: мощная способность отложить вычисление правильного ответа до более удобного времени. Как следует из названия, построение «обещания» дать вам результат в какой-то момент, просто не обязательно прямо сейчас. Вы можете прочитать больше о фьючерсных и обещаниях работать в большем масштабе здесь .