【发布时间】:2020-04-25 11:35:16
【问题描述】:
我希望我的代码在执行之前可以等待一个循环。说我有这样的代码:
static getData(num){
return fetch('https://somedomain.me/${i}')
.then(resolve => {
return.resolve.json()
})
.then(resolveJson => {
if(resolveJson.status == 'ok'){
return Promise.resolve(resolveJson.data);
} else{
return Promise.reject('Something Error')
}
})
.catch(error => {return Promise.reject(error)});
}
static async myFunction(){
const a = [1, 2, 3, 4, 5];
const content = []
for(let i in a){
try{
const myData = await this.getData(i);
content.push(myData);
}catch(error){
console.log(error);
}
}
console.log(content);
}
但是console.log(content) 是首先执行的,即使我使用async-await。所以,我无法从fetch 获取数据。我的代码有问题吗?
编辑:return Promise.resolve(resolveJson)、return Promise.reject('Something Error')、return Promise.reject(resolveJson)。和try-catch
【问题讨论】:
-
return.resolve.json()将抛出一个 SyntaxError,并且您在getData范围内没有resolve函数 -
仅仅因为 fetch 返回 Promise 并不意味着有一个
resolve函数 ... resolve 函数只存在于 Promise 构造函数中 -
...也不是
reject -
对不起,我是 javascript 的新手。但是我的另一个项目遇到了这个问题,但是执行了一些获取。我循环获取 3 次,以及来自 console.log 的输出:(firstFetch)。第二个和第三个没有得到。谁能告诉我该怎么办?
-
@CertainPerformance @Jaromanda X @Luis Ramalho 我返回
Promise.resolve和Promise.reject。并尝试console.log(getData),有结果(不是错误)。对吗?