【发布时间】: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