类型错误:#<Promise> 不可迭代。

28

我试图使用promise.all进行多个API调用,但出现以下错误:

TypeError:#不可迭代

我的Promise非常简单(这可能是我第二次使用Promise.all)

componentWillMount() {
    const id = this.props.location.pathname
    let axiosHome = axios.get('/home')
    let axiosUserData = axios.get("/profile/" + id)
    Promise.all(axiosHome,  axiosUserData).then(response => {
        console.log(response)
    }).catch(error => {
        console.log(error)
    })
  }

问题:有什么想法,我为什么会出现这个错误?同时,有人能解释一下我们何时使用 promise 的 resolve 关键字吗?

2个回答

48

Promise.all 接受一个参数,该参数是一个 由 Promise 组成的数组 - 后续的参数将被丢弃。因此,应该传入一个数组:

Promise.all([axiosHome,  axiosUserData])
  .then(...

什么时候我们需要在 Promise 中使用 resolve 关键字?

resolve 不是一个关键字,它只是在构建 Promise 时惯用的函数名称:

const prom = new Promise((resolve, reject) => {
  // do some asynchronous stuff
  if (ok) resolve();
  else reject();
});
当一个Promise被明确构建时,调用resolve()来解决Promise。(当然,函数参数可以使用任何名称,它不必被称为resolve)

0

Promise.all() 接受方法(异步)的数组,数据可以作为数组分配给变量

示例:

let [axiosHomeData , axiosUserData] = await Promise.all([axiosHome,  axiosUserData]);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接