async 함수 원리 및 사용 방법
async 함수는 무엇입니까?한마디로 Generator 함수의 문법당, async 함수의 실현 원리는 Generator 함수와 자동 집행기를 하나의 함수에 포장하는 것이다.
1, Generator 함수
const fs = require('fs');
const readFile = function (fileName) {
return new Promise(function (resolve, reject) {
fs.readFile(fileName, function(error, data) {
if (error) return reject(error);
resolve(data);
});
});
};
const gen = function* () {
const f1 = yield readFile('/etc/fstab');
const f2 = yield readFile('/etc/shells');
console.log(f1.toString());
console.log(f2.toString());
};
async로 전환:
const asyncReadFile = async function () {
const f1 = await readFile('/etc/fstab');
const f2 = await readFile('/etc/shells');
console.log(f1.toString());
console.log(f2.toString());
};
비교해 보면
async
함수는 Generator 함수의 별표(*
를 async
, yield
를 await
로 바꾸는 것이다.async는Generator를 개선했을 뿐입니다.
2, async의 구체적인 사용과 장점
async
함수는 Promise 객체를 반환하고 then
메서드를 사용하여 콜백 함수를 추가할 수 있습니다.함수가 실행될 때 await
를 만나면 먼저 되돌아와 비동기적인 조작이 끝날 때까지 기다렸다가 함수 체내 뒤의 문장을 실행한다.function timeout(ms) {
return new Promise((resolve) => {
setTimeout(resolve, ms);
});
}
async function asyncPrint(value, ms) {
await timeout(ms);
console.log(value);
}
asyncPrint('hello world', 50);
위 코드는 50밀리초 후에 출력
hello world
을 지정합니다.async 비동기 함수 변체:
: async function foo() {}
: const foo = async function () {};
:let obj = { async foo() {} }
: const foo = async () => {};
이해:
async는 이것은 async 함수이고, await는 이 함수에서만 사용할 수 있음을 나타낸다.
await는 여기서 await 뒤의 작업이 완료되기를 기다리고 다음 코드를 실행합니다.
wait 뒤에 바짝 붙어 있는 가장 좋은 것은 시간 소모적인 조작이나 비동기적인 조작이다.
3, 오류 처리
await 뒤의 비동기화 작업이 잘못되면, async 함수로 되돌아오는 Promise 대상과reject입니다.
async function f() {
await new Promise(function (resolve, reject) {
throw new Error(' ');
});
}
f()
.then(v => console.log(v))
.catch(e => console.log(e))
// Error:
오류를 방지하는 방법도 코드 블록에 넣는 것이다.
async function main() {
try {
const val1 = await firstStep();
const val2 = await secondStep(val1);
const val3 = await thirdStep(val1, val2);
console.log('Final: ', val3);
}
catch (err) {
console.error(err);
}
}
말하자면 async도 Promis 대상이다. 우리는 async 뒤에 then이나catch라는 물건을 붙여서 오류를 방지할 수 있다.
다음으로 전송:https://www.cnblogs.com/luozhixiang/p/9116965.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.