【问题标题】:How to resolve an undefined Promise error如何解决未定义的 Promise 错误
【发布时间】:2020-06-17 13:15:13
【问题描述】:

在我的 React 应用程序中,我正在获取 NASA API 以获取 Rovers 照片。 为了让我有更好的代码结构,我构建了一个带有超时实用程序的 Promise,如下所示

export async function PromiseWithTimeout(promises, timeout) {
  let promise = promises;
  if (promises instanceof Array) promise = Promise.allSettled(promises).then(console.log);
  return Promise.race([promise, throwTimeout(timeout)]);
}

export const throwTimeout = (msec, message = 'timeout') => reject(msec, message);

export const reject = (msec, retVal) => new Promise((_, r) => setTimeout(r, msec, retVal));
export const resolve = (msec, retVal) => new Promise((r) => setTimeout(r, msec, retVal));

以 console.log 为例,此实用程序的结果如下:

0: {status: "fulfilled", value: {…}}
1: {status: "fulfilled", value: {…}}
2: {status: "fulfilled", value: {…}}

我有上面函数调用的结果,它在组件内部的下一个方式中使用,但问题出在.then() 这里我知道forEach() 是未定义的,当我console.log(rovers) === undefined我不知道出了什么问题。我正在解决我的承诺,但我没有进一步进入系统

componentDidMount = async () => {
    try {
      await PromiseWithTimeout(
        [
          getRoverManifest('curiosity'),
          getRoverManifest('opportunity'),
          getRoverManifest('spirit'),
        ],
        3000
      ).then(
        (rovers) => {
          rovers.forEach(savePhotosManifest);
          if (rovers.some((rover) => rover.photo_manifest === undefined))
            this.setState({ error: true, isLoading: false });

          this.setState({
            isLoading: false,
            rovers,
          });
        },
        (error) => {
          console.error('Error fetching Rover Manifests: ', error);
          this.setState({ error: true, isLoading: false });
        }
      );
    } catch (error) {
      console.error('Error Mars Rover Page: ', error);
      this.setState({
        error: true,
        isLoading: false,
      });
    }
  };

【问题讨论】:

    标签: javascript reactjs promise


    【解决方案1】:

    您必须在Promise.allSettledthen 块中返回result

    喜欢这个

    promise = Promise.allSettled(promises).then((res) => {
      console.log(res);
      return res;
    });
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-14
      • 1970-01-01
      • 1970-01-01
      • 2020-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-22
      相关资源
      最近更新 更多