同一文件中的JavaScript函数彼此看不见



所以我在fileA.js:中定义了多个函数

exports.doThis = async (a, b, c) => {
return Promise.all(a.map(item => doThat(item, b, c) ) )
}
exports.doThat = async (item, b, c) => {
console.log(`${b[1]} ${item} are good for ${c[0]`)
}

我将doThisdoThat导入到fileB.js中,如下所示:

const { doThis, doThat } = require('fileA')
const totallyDoingIt = async () => {
let a = ['apples', 'bananas', 'peaches']
let b = [1, 2, 3]
let c = ['Tom', 'Ryan', 'Suzy']
let startThingsOff = await doThis(a, b, c)
}

我预计doThis将在fileA.js中看到doThat,但当运行此程序时,我会得到以下错误:

ReferenceError: doThat is not defined

那么我怎样才能doThisdoThat看到2 apples are good for Tom呢?

doThat不是一个独立的标识符-它是module.exports的一个属性,因此引用:

return Promise.all(a.map(item => exports.doThat(item, b, c) ) )

如果您想仅使用该标识符引用doThisdoThat,则必须这样定义函数。一种方法是使用正则命名函数。

//  export name               local name
exports.doThis = async function doThis(a, b, c) {
return Promise.all(a.map(item => doThat(item, b, c) ) )
};
exports.doThat = async function doThat(item, b, c) {
console.log(`${b[1]} ${item} are good for ${c[0]}`);
};

另一种选择是先定义函数,然后再导出。

// define
const doThis = async (...) => { ... };
const doThat = async (...) => { ... };
// export
module.exports = { doThis, doThat };
// or
Object.assign(exports, { doThis, doThat });
// or
exports.doThis = doThis;
exports.doThat = doThat;
// etc.

最新更新