首页 > 解决方案 > 在 Promise 中使用导出的 Object 变量

问题描述

我有两个正在处理的 javascript 文件。在其中一个文件(file1.js)上,我在底部有一行用于导出对象键变量。

module.exports = {randomData};

在另一个文件(file2.js)上,我将它包含在顶部:

const {randomData} = require('./file1.js');

现在,当我尝试{randomData}在 file2.js 的 Promise 部分之一中使用此对象时,它仍然未定义为值。我意识到这是因为 Promise 代码在 file1.js 的导出部分甚至完成执行以实际提供{randomData}任何值之前运行。我试图用 Promises/asyncs/awaits 来包装东西,但我没有得到任何结果。我尝试了以下方法,认为它会起作用。

    var randomData = {};

function printRandomData(){
  setTimeout(() => {
        console.log(randomData);
    }, 1000);
}

function fetchRandomData(){
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            randomData = require('./file1.js');

            if(randomData){
                resolve();
            }
            else{
                reject('Error: Something went wrong!')
            }
        }, 2000);
    })
}

async function init() {

  await fetchRandomData(); // wait until the promise resolves (*)

  printRandomData(); // "done!"
}

init();

我希望上面的代码printRandomData()最后运行,然后输出 的值randomData,此时应该将其设置为与fetchRandomData()方法不同的值。但是,情况并非如此,因为打印结果为空对象。但是,从 file1.js 打印将显示randomData包含值。

require在 file2.js 中发生其他任何事情之前,我如何使该部分首先发生?

标签: javascriptwebasync-awaitpromisenode-modules

解决方案


推荐阅读