Я пытаюсь понять причудливый мир обещаний 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 мс и потом завершает работу. Может кто-нибудь объяснить, чем (функционально) отличаются два приведенных выше примера? Спасибо.
()
символов, когда не должно быть()
символов. - person zzzzBov   schedule 24.09.2015()
в код JS не является типографской ошибкой. Почему ты так думаешь? - person Tomalak   schedule 24.09.2015()
, когда этого делать не следовало, - это такая же ошибка, как и опечатка. - person zzzzBov   schedule 24.09.2015foo
иfoo()
. И это семантическая ошибка, совершенно отличная от опечатки в имени функции или написания,
вместо;
в операторе циклаfor
. И люди, задающие вопросы о своих семантических ошибках, здесь, чтобы учиться, в отличие от толпы, пожалуйста, исправьте мой код. Они настолько в теме, насколько это возможно. - person Tomalak   schedule 24.09.2015