繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM