[英]How to set variable = a value from a function result inside async function
在函数内部,我想将变量(foldersInDir)的值设置为使用fs.readdir()获取目录内容的结果;
我以为使用await会强制console.log行等待响应,但事实并非如此。
如何设置foldersInDir =返回值?
/*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
转换为promise,例如:
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);
}
编辑:对不起,需要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
函数来解决问题。 此函数将基于回调的函数转换为基于承诺的函数,然后可以使用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); }
const fs = require('fs'); const test = () => { let folders = fs.readdirSync('.'); return folders; } console.log(test());
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.