【问题标题】:How to wait looping before execute other code?如何在执行其他代码之前等待循环?
【发布时间】: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.resolvePromise.reject。并尝试console.log(getData),有结果(不是错误)。对吗?

标签: javascript async-await


【解决方案1】:

尝试将 fetch 与 async/await 一起使用:

static async getData(num){
    const result = await fetch('https://somedomain.me/${i}')
    const {data, status} = await result.json()
    if (status === 'ok') {
        return data
    }

    throw new Error('Something error')
}
static async myFunction(){
    const a = [1, 2, 3, 4, 5];
    const content = []
    for(const i of a) {
        const myData = await this.getData(i);
        content.push(myData);
    }
    console.log(content);

}

【讨论】:

  • 感谢您的回答。但是console.log() 仍然在循环完成之前执行。得到了一些获取结果(第一和第二)。结果:firstFetch, secondFetch, undefined, undefined, undefined。我认为 API 是空的或类似的东西。但我向邮递员查询,API 中有数据
猜你喜欢
  • 2021-02-16
  • 1970-01-01
  • 1970-01-01
  • 2020-04-29
  • 1970-01-01
  • 1970-01-01
  • 2013-08-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多