首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

TypeError:(中间值)不是异步Promise.all的函数

在使用 Promise.all 时,如果传入的参数不是 Promise 对象,就会抛出 TypeErrorPromise.all 接受一个 Promise 对象的数组,并返回一个新的 Promise 对象,该对象在所有输入的 Promise 对象都成功完成时才会完成。

以下是一些可能导致 TypeError 的常见原因和解决方法:

1. 传入的参数不是 Promise 对象

确保你传入 Promise.all 的每个元素都是一个 Promise 对象。例如:

代码语言:javascript
复制
const promise1 = Promise.resolve(1);
const promise2 = Promise.resolve(2);
const promise3 = 3; // 这不是一个 Promise 对象

Promise.all([promise1, promise2, promise3])
  .then(values => {
    console.log(values); // [1, 2, 3]
  })
  .catch(error => {
    console.error(error);
  });

在上面的例子中,promise3 不是一个 Promise 对象,因此会抛出 TypeError

2. 使用了非异步函数

确保你在使用 Promise.all 时,传入的函数是异步的。例如:

代码语言:javascript
复制
async function fetchData() {
  const promise1 = Promise.resolve(1);
  const promise2 = Promise.resolve(2);
  const promise3 = Promise.resolve(3);

  try {
    const values = await Promise.all([promise1, promise2, promise3]);
    console.log(values); // [1, 2, 3]
  } catch (error) {
    console.error(error);
  }
}

fetchData();

3. 使用了非异步函数作为回调

如果你在使用回调函数,确保回调函数是异步的。例如:

代码语言:javascript
复制
function fetchData(callback) {
  const promise1 = Promise.resolve(1);
  const promise2 = Promise.resolve(2);
  const promise3 = Promise.resolve(3);

  Promise.all([promise1, promise2, promise3])
    .then(values => {
      callback(null, values);
    })
    .catch(error => {
      callback(error);
    });
}

fetchData((error, values) => {
  if (error) {
    console.error(error);
  } else {
    console.log(values); // [1, 2, 3]
  }
});

4. 使用了非异步函数作为 Promise.all 的参数

确保你传入 Promise.all 的每个元素都是一个 Promise 对象。例如:

代码语言:javascript
复制
const promise1 = Promise.resolve(1);
const promise2 = Promise.resolve(2);
const promise3 = () => 3; // 这不是一个 Promise 对象

Promise.all([promise1, promise2, promise3()])
  .then(values => {
    console.log(values); // [1, 2, 3]
  })
  .catch(error => {
    console.error(error);
  });

在上面的例子中,promise3 是一个函数,而不是一个 Promise 对象,因此会抛出 TypeError

总结

确保你传入 Promise.all 的每个元素都是一个 Promise 对象,并且在使用回调函数时,确保回调函数是异步的。这样可以避免 TypeError 的发生。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

没有搜到相关的视频

领券