[英]import async function from the module
我有一个看起来像这样的 function
let fileCache = {};
async function generateFromFile(fullPath) {
if (!fileCache[fullPath]) {
let jsonResource = await fs.readFile(fullPath);
fileCache[fullPath] = JSON.parse(jsonResource);
}
return fileCache[fullPath];
}
当我像这样在同一个模块中使用它时
await generateFromFile('myfile.json');
它工作正常。
我创建了一个单独的文件,将 function 放在那里并像这样导出
let fileCache = {};
async function generateFromFile(fullPath) {
if (!fileCache[fullPath]) {
let jsonResource = await fs.readFile(fullPath);
fileCache[fullPath] = JSON.parse(jsonResource);
}
return fileCache[fullPath];
}
module.exports = {
generateFromFile: generateFromFile
}
我是这样导入的
const utils = require('../util/utils.js');
并想像await utils.generateFromFile('myfile.json');
一样使用但它失败并出现错误
TypeError [ERR_INVALID_CALLBACK]: Callback must be a function. Received undefined
问题是什么?
你是如何导入你的 fs 模块的。 要将readFile
与await
一起使用,您应该编写fs.promise.readFile
或 import fs
as import { promises as fs } from 'fs'
您确定您新创建的文件位于相对目录../util/utils.js
吗? 你的出口看起来不错。 也许尝试打印出导入的实用程序utils
以查看您实际导入的内容。
编辑:您还将相对文件名传递给您的 function 现在位于与以前不同的目录中。 访问fs.readFile(fullPath)
时,它会尝试读取目录“util/”中的文件。 您应该使用路径节点 package调用您的 function 和完整的文件路径,如util.generateFromFile(path.join(__dirname, "myfile.json"))
。
编辑 2:像 Raeesaa state 一样,您使用 fs.readFile 错误。 它不返回 Promise 但期望回调。 要await
它,您必须像这样 承诺它:
const fs = require("fs");
const { promisify } = require("util");
const readFileAsync = promisify(fs.readFile);
let fileCache = {};
async function generateFromFile(fullPath) {
if (!fileCache[fullPath]) {
let jsonResource = await readFileAsync(fullPath);
fileCache[fullPath] = JSON.parse(jsonResource);
}
return fileCache[fullPath];
}
module.exports = {
generateFromFile: generateFromFile
}
编辑 3:如果您只导入 JSON 文件,您可以使用require
来完成。 在内部,require 也有一个缓存,所以导入只执行一次。 您可以将 JSON 文件作为对象导入,如下所示: const obj = require("myfile.json");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.