[node.js] async / await로 파일을 올바르게 읽는 방법은 무엇입니까?
나는 어떻게 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
로 콜백을받지 않고 데이터를 반환하거나 예외를 throw합니다. 제공하는 함수가 무시되고 실제 반환 값을 캡처하지 않기 때문에 원하는 값을 얻지 못합니다.
답변
Node v11.0.0 fs promise는 기본적으로 다음없이 사용할 수 있습니다 promisify
.
const fs = require('fs').promises;
async function loadMonoCounter() {
const data = await fs.readFile("monolitic.txt", "binary");
return new Buffer(data);
}
답변
이것은 @Joel의 대답의 TypeScript 버전입니다. Node 11.0 이후에 사용할 수 있습니다.
import { promises as fs } from 'fs';
async function loadMonoCounter() {
const data = await fs.readFile('monolitic.txt', 'binary');
return Buffer.from(data);
}
답변
readFile 명령을 다음과 같은 약속으로 쉽게 래핑 할 수 있습니다.
async function readFile(path) {
return new Promise((resolve, reject) => {
fs.readFile(path, 'utf8', function (err, data) {
if (err) {
reject(err);
}
resolve(data);
});
});
}
그런 다음 다음을 사용하십시오.
await readFile("path/to/file");
답변
fs.promises
Node v11.0.0부터 기본적으로 사용할 수 있습니다.
import fs from 'fs';
const readFile = async filePath => {
try {
const data = await fs.promises.readFile(filePath, 'utf8')
return data
}
catch(err) {
console.log(err)
}
}
답변
이 fs.readFileSync( path, options )
동기 방법은.