2016-12-01 5 views
1

У меня есть код секции https://jsfiddle.net/h3m10005/Использование SetTimeout разрешить или отклонить обещание

let p = new Promise((resolve, reject) =>{ 
    setTimeout(()=>reject('error'), 5000); 
}); 

p.then(null,(err)=>{ 
    console.log(err); 
}); 

Когда выше секция кода запускается на выполнение, примерно через 5 секунд я вижу error распечатаны. Однако, если я не завершу вызов reject() в функции, консоль выводит error сразу. Например,

let p = new Promise((resolve, reject) =>{ 
     setTimeout(reject('error'), 5000); 
}); 

p.then(null,(err)=>{ 
     console.log(err); 
}); 

Любая идея, почему это может быть так? Благодарю.

ответ

3

Это потому, что во втором примере вы вызываете его немедленно.

setTimeout(reject('error'), 5000); 

В основном используется результат вызова reject ('error') в качестве первого аргумента для setTimeout.

+0

вздох ... Как я пропустил это? Спасибо, Кевин. – VietNg

0

()=>reject('error') и reject('error') совершенно разные. В этом случае первый синтаксис эквивалентен function(){ reject('error')} при вызове reject('error') без его обертки в обратном вызове немедленно вызовет эту функцию.