Все, что делает Promise.resolve
, это принимает выражение и превращает его в Promise
, который немедленно разрешает это выражение.Если выражение представляет собой простой тип любого значения (примитив, массив, объект и т. Д.) , отличающийся от , отличного от Promise
, то Promise
, возвращаемое Promise.resolve
, все равно разрешится немедленно.Ваша функция getProductId
ничего не возвращает, поэтому ваш prom2
приводит к Promise
, который немедленно принимает значение undefined
.
Promise.resolve
не поможет вашей ситуации - вам нужнопреобразовать обратный вызов в Promise
, и единственный способ сделать это - использовать конструктор new Promise
:
console.log('start');
const getProductId = () => new Promise(res => setTimeout(res, 1500, 5));
getProductId().then(res => console.log(res));
Время использования Promise.resolve
- это если у вас уже есть значение (синхронно) и вы хотите превратить его в Promise
, который вы можете вызвать .then
,Например, используя Promise.resolve('begin')
в качестве начального значения для аккумулятора в следующем коде, можно создать простую цепочку Promise
с помощью reduce
:
const prom = ['foo', 'bar', 'baz']
.reduce((lastProm, str) => (
lastProm.then((lastStr) => {
console.log(lastStr);
return str;
})),
Promise.resolve('begin')
);
prom.then((lastStr) => {
console.log(lastStr);
console.log('end');
});