minx
minx

Reputation: 13

undefined is not a promise

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);
});

the Promise.all shows the result "Array [3, 42, "foo"]" but the Promise gave me an error "undefined is not a promise" i tried to edit it as new Promise but it gave me a new error "Promise resolver 42 is not a function"

Upvotes: 0

Views: 917

Answers (2)

abhishek rana
abhishek rana

Reputation: 172

Promise constructor is used to wrap function and not integer which is why you are getting an error when trying to warp a integer inside a promise. Reference

You can do this in two ways:-

  1. Create a Promise resolved like you have done in 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. You can wrap integer value inside a new promise and then use that value

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);
});

Upvotes: 1

Yuriy Vorobyov
Yuriy Vorobyov

Reputation: 775

You need to use it like this:

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

Upvotes: 3

Related Questions