如何设置变量 = 异步函数内函数结果中的值



>在一个函数中,我想将变量(folderInDir(的值设置为使用fs.readdir((获取目录内容的结果;

我以为使用 await 会强制控制台.log行等待响应,但事实并非如此。

如何设置文件夹InDir = 返回值?

/*Begin function*/
const listContents = async (myPath) => {
var fs = require('fs');
let foldersInDir = await fs.readdir(myPath, function(err, items) {
console.log(items); //works
return  items;
});
console.log(foldersInDir); //does not work, undefined
}

您需要将readdir转换为承诺,例如:

const foldersPromised = (path) =>
new Promise((resolve, reject) =>
fs.readdir(path, (err, items) =>
err !== undefined ? reject(err) : resolve(items)
)
);
try {
let foldersInDir = await foldersPromised(myPath);
} catch(err) {
console.log(err);
}

const fs = require('fs');
const test = () => {
let folders = fs.readdirSync('.');
return folders;
}
console.log(test());

编辑:对不起,需要 promisify(( 函数

const fs = require('fs');
const { promisify } = require('util') // available in node v8 onwards
const readdir = promisify(fs.readdir)
async function listContents() {
try {                                         // wrap in try-catch in lieu of .then().catch() syntax
const foldersInDir = await readdir(myPath)  // call promised function
console.log('OK, folders:', foldersInDir)   // success
} catch (e) {
console.log('FAIL reading dir:', e)         // fail
}  
}
listContents('path/to/folder') // run test

我建议使用 Node.js 提供的promisify函数来解决这个问题。此函数会将基于回调的函数转换为基于 promise 的函数,然后可以使用await关键字使用该函数。

const fs = require('fs');
const {
promisify
} = require('util');
const readdirAsync = promisify(fs.readdir);
/*Begin function*/
const listContents = async(myPath) => {
let foldersInDir = await readdirAsync(myPath);
console.log(foldersInDir);
}

最新更新