Хей, у меня есть этот код:
var promise1 = new Promise(function(resolve, reject) {
setTimeout(() => {
console.warn('Elo');
resolve('First response');
},
1000);
})
promise1
.then((resp) => {
console.warn('First then!');
});
И он разрешает обещание через секунду, а затем и console.warning "Сначала то!".
Но когда я меняю строку:
resolve('First response');
за
Promise.resolve('First response');
Это не сработает. Подумайте, почему?
Также попробовал
return Promise.resolve('First response');
Но это также не работает. Я не знаю почему.
Можете ли вы помочь мне понять это?
new Promise
конструктор new Promise
передает определенную функцию в ваш обратный вызов, который становится вашим параметром resolve
. Это обещание (то, которое вы строите там с new Promise
) может быть разрешено только путем вызова этой конкретной функции resolve
.
Promise.resolve
просто создает новое "предварительно разрешенное" обещание. Он не разрешает никаких существующих обещаний (и не имеет никакого способа узнать, какое обещание он должен решить).
Еще один способ думать об этом:
Разрешить === resolCallback === первый аргумент, предоставленный вашему обратному вызову Promise Promise.resolve === функция для возврата new Promise
Эти два функциональных эквивалента:
'const foo = Promise.resolve('First response').then( /* ... */ );'
'const bar = new Promise(function(resolveCallback, rejectCallback) {
resolCallback ("Первый ответ"); }).затем(/*... */);'