当前位置: 首页 > 面试题库 >

如何使用async / await正确读取文件?

姬凡
2023-03-14
问题内容

我无法弄清楚async/的await运作方式。我对此有些了解,但无法使其正常工作。

function loadMonoCounter() {
    fs.readFileSync("monolitic.txt", "binary", async function(err, data) {
       return await new Buffer( data);
  });
}

module.exports.read = function() {
  console.log(loadMonoCounter());
};

我知道我可以使用readFileSync,但是如果这样做,我知道我永远不会理解async/ await我只会埋葬这个问题。

目标:调用loadMonoCounter()并返回文件的内容。

每次incrementMonoCounter()调用该文件都会增加一次(每页加载)。该文件包含二进制缓冲区的转储,并存储在SSD中。

无论我做什么,都会出现错误或undefined在控制台中。


问题答案:

要使用await/,async您需要返回承诺的方法。没有包装器,核心API函数就不会这样做promisify

const fs = require('fs');
const util = require('util');

// Convert fs.readFile into Promise version of same    
const readFile = util.promisify(fs.readFile);

function getStuff() {
  return readFile('test');
}

// Can't use `await` outside of an async function so you need to chain
// with then()
getStuff().then(data => {
  console.log(data);
})

注意,readFileSync不进行回调,而是返回数据或引发异常。您没有得到想要的值,因为您提供的该函数将被忽略,并且您没有捕获实际的返回值。



 类似资料:
  • 我读到过,在中包含异步是async/await的反模式。下面的代码可以工作,但是我想知道如果没有中的,如何实现相同的结果。 谢了。

  • 问题内容: 我喜欢Typescript等中提供的新功能的平坦性。但是,我不确定我是否必须在块的外部声明要输入的变量以便以后使用,这一点我不确定。像这样: 如果我错了,请纠正我,但是似乎最好的做法是不要在主体中放置多行业务逻辑,因此,我只剩下在块外声明,在块中分配,以及然后使用它。 在这种情况下,最佳做法是什么? 问题答案: 似乎最好的做法是不要在try主体中放置多行业务逻辑 其实我会说是的。通常,

  • 问题内容: 我正在做一个需要我向API发出请求的项目。用Async / Await发出POST请求的正确形式是什么? 作为示例,这是我获取所有设备列表的信息。我将如何将此请求更改为POST以创建新设备?我知道我必须添加带有数据正文的标头。 问题答案: 实际上,您的代码可以像这样进行改进: 要发布信息,只需在获取调用的设置上添加方法。

  • 本文向大家介绍Array.filter中如何正确使用Async,包括了Array.filter中如何正确使用Async的使用技巧和注意事项,需要的朋友参考一下 1. 如何仅保留满足异步条件的元素 在第一篇文章中,我们介绍了 async / await 如何帮助处理异步事件,但在异步处理集合时却无济于事。在本文中,我们将研究该filter函数,它可能是支持异步函数的最直观的方法。 2. Array.

  • 我试图使用Async/Await读取一个文件,我创建了基于示例的本机Async/Await方法,结果出现了这个错误。 SyntaxError:await仅在异步函数中有效 这是我的密码。 我的代码有什么问题?我的节点版本是11.9。0,我的npm版本是6.7。0,我正在使用Arch Linux。

  • 我已经复习了/,在复习了几篇文章之后,我决定自己测试一下。然而,我似乎无法理解为什么这不起作用: 控制台输出以下内容(节点V8.6.0): >外:“对象承诺” >内部:嘿那里 为什么函数内部的日志消息会在之后执行?我认为创建/的原因是为了使用异步任务执行同步执行。 有没有一种方法可以使用函数内部返回的值,而不用后面的?