Я пытаюсь понять сумасшедший мир обещаний javascript и наткнулся на это, что я не понимаю.Javascript Обещает явные функции против встроенных функций
Первая программа из книги объясняя обещание цепочки и работает точно так же, как вы могли бы подумать:
var Promise = require('promise');
function delay(time) {
return new Promise(function(resolve,reject) {
setTimeout(resolve, time);
});
}
delay(1000) // step 1
.then(function STEP2(){
console.log("step 2b (after 1000ms)");
return delay(2000);
})
.then(function STEP3(){
console.log("step 3b (after another 2000ms)");
})
.then(function STEP4(){
console.log("step 4b (next Job)");
return delay(5000);
})
.then(function STEP5() {
console.log("step 5b (after another 5000ms)");
});
На консоли журналов появляются после того, как правильное количество задержек.
сейчас, для того, чтобы сделать это более ясным в моем сознании, я сделал функцию STEP явно поэтому программа теперь выглядит следующим образом:
var Promise = require('promise');
function delay(time) {
return new Promise(function(resolve,reject){
setTimeout(resolve, time);
});
}
function STEP2() {
console.log("step 2 (after 1000ms)");
return delay(2000);
}
function STEP3() {
console.log("step 3 (after another 2000ms)");
}
function STEP4() {
console.log("step 4 (next Job)");
return delay(5000);
}
function STEP5() {
console.log("step 5 (after another 5000ms)");
}
delay(1000).then(STEP2()).then(STEP3()).then(STEP4()).then(STEP5());
Но теперь все журналы консоль произойдут сразу, программу задерживает 5000 мс и затем выходит. Может ли кто-нибудь объяснить, что другое (функционально) между двумя приведенными выше примерами? Спасибо.
В первом варианте вы не вызывая функции шага (просто передавая их в качестве параметров). – thebjorn
[Голосование, чтобы закрыть это как не по теме (# 2)] (http://stackoverflow.com/help/on-topic). – zzzzBov
@zzzzBov Какая часть этого вопроса вне темы для вас? – Tomalak