неопределенный не является обещанием

#javascript #node.js

#javascript #node.js

Вопрос:

 const promise1 = Promise.resolve(3);
const promise2 = 42;
const promise3 = new Promise((resolve, reject) => {
  setTimeout(resolve, 100, 'foo');
});

Promise.all([promise1, promise2, promise3]).then((values) => {
  console.log(values);
});
Promise(promise2).then((values) => {
  console.log(values);
});
 

Promise.all показывает результат «Array [3, 42, «foo»]», но Promise выдал мне сообщение об ошибке «undefined не является обещанием»
я попытался отредактировать его как new Promise , но он выдал мне новую ошибку «Распознаватель обещаний 42 не является функцией»

Ответ №1:

Вам нужно использовать его следующим образом:

 Promise.resolve(promise2).then((values) => {
  console.log(values);
});
 

Ответ №2:

Конструктор обещания используется для переноса функции, а не целого числа, поэтому вы получаете сообщение об ошибке при попытке деформировать целое число внутри обещания. Ссылка

Вы можете сделать это двумя способами:-

  1. Создайте обещание, разрешенное, как вы сделали в promise1
 const promise1 = Promise.resolve(3);
const promise2 = Promise.resolve(42);
const promise3 = new Promise((resolve, reject) => {
  setTimeout(resolve, 100, "foo");
});

Promise.all([promise1, promise2, promise3]).then((values) => {
  console.log(values);
});
promise2.then((values) => {
  console.log(values);
}); 

  1. Вы можете обернуть целочисленное значение внутри нового обещания, а затем использовать это значение
 const promise1 = Promise.resolve(3);
const promise2 = 42;
const promise3 = new Promise((resolve, reject) => {
  setTimeout(resolve, 100, "foo");
});

Promise.all([promise1, promise2, promise3]).then((values) => {
  console.log(values);
});
new Promise((resolve, reject) => {
  resolve(42);
}).then((values) => {
  console.log(values);
});