首页 > 解决方案 > 在运行第二个 javascript 文件之前等待承诺完成?

问题描述

我有两个 javascript 文件。第一个,request.js,从 URL 获取 JSON 并将数据格式化,将其分配给全局变量。第二个,main.js,使用来自全局变量的数据。我遇到的问题是第二个 javascript 文件在来自 URL 的请求得到解决之前运行。有没有什么办法可以阻止程序的其余部分运行,直到 promise 得到解决,而无需从 request.js 中的 main.js 调用函数?

请求.js:

...
fetch(url).then(res => res.json())
    .then((data) => {
        organiseData(data);
    })
    .catch(err => {
        throw err
    });
...

主.js:

...
loadImages(submissionArr, categoriesMap);
...

编辑:我试图避免在主文件中显式调用 request.js 文件,因为我还计划将它与其他 javascript 文件一起使用。

标签: javascriptpromise

解决方案


将 fetch 包装在一个函数中并返回它的承诺,以便您可以执行以下操作:

function getData() {  
    // return the fetch promise  
    return fetch(url).then(res => res.json())
        .then((data) => {       
            organiseData(data);
            // optionally return data if needed it down the chain
        })
        .catch(err => {
            throw err
        });    
}

然后从 main 调用它:

getData().then(data = > loadImages(submissionArr, categoriesMap);)

推荐阅读