노드 Async/Await 비동기 프로그래밍 구현에 대한 자세한 설명

php中世界最好的语言
풀어 주다: 2018-05-22 11:46:30
원래의
2097명이 탐색했습니다.

이번에는 노드 Async/Await 비동기 프로그래밍 구현에 대해 자세히 설명하고, 노드 Async/Await 비동기 프로그래밍 구현 시 주의사항은 무엇인지 살펴보겠습니다. .

1. 비동기 프로그래밍에 대한 궁극적인 솔루션

몇일 전 저는

javascript 비동기 작업에 대한 "Javascript Promise 상세 설명"이라는 글을 썼습니다. 최근 Puppeteer를 공부하면서 또 다른 비동기 프로그래밍 솔루션을 발견했습니다. Async/Await.

비동기 작업은 JavaScript 프로그래밍에서 골치 아픈 문제입니다. 일부 사람들은 이 문제를 해결하기 위해 다양한 솔루션을 제안해 왔습니다. 최초의

콜백 함수부터 Promise object, 그리고 Generator 함수까지 매번 개선이 있지만 불완전한 느낌이 듭니다. 이들 모두에는 추가적인 복잡성이 있으며 추상화의 기본 작동 메커니즘에 대한 이해가 필요합니다.

Async 기능이 나온 후 어떤 사람들은 이것이 비동기 프로그래밍의 궁극적인 솔루션이라고 생각했습니다. Async/Await를 사용하면 비동기 프로그래밍인지 걱정할 필요가 없습니다.

2. 기본 사용법

async 함수는 Promise 객체를 반환하며, then 메소드를 사용하여 콜백 함수를 추가할 수 있습니다. 함수가 실행될 때 대기가 발생하면 먼저 반환하고 트리거된 비동기 작업이 완료될 때까지 기다린 다음 함수 본문의 후속 명령문을 실행합니다.

다음은 밤나무입니다.

var sleep = function (time) {
  return new Promise(function (resolve, reject) {
    setTimeout(function () {
      resolve();
    }, time);
  })
};
var start = async function () {
  // 在这里使用起来就像同步代码那样直观
  console.log('start');
  await sleep(3000);
  console.log('end');
};
start();
로그인 후 복사
위 코드를 실행하면 콘솔이 먼저 출력을 시작하고 3초를 기다린 후 종료를 출력하는 것을 볼 수 있습니다.

3. Notes

1. Wait 명령은 비동기 함수에서만 사용할 수 있습니다.

async function dbFuc(db) {
 let docs = [{}, {}, {}];
 // 报错
 docs.forEach(function (doc) {
  await db.post(doc);
 });
}
로그인 후 복사
2. 대기는 실행을 계속하기 전에 결과를 반환할 약속을 기다리는 것을 의미합니다.

var sleep = function (time) {
  return new Promise(function (resolve, reject) {
    setTimeout(function () {
      // 返回 ‘ok'
      resolve('ok');
    }, time);
  })
};
var start = async function () {
  let result = await sleep(3000);
  console.log(result); // 收到 ‘ok'
};
로그인 후 복사
3. Wait 뒤에는 Promise 개체가 와야 합니다.

코드가 동기적으로 실행되면 수정 대기를 사용할 필요가 없습니다.

4.await는 기본 구문에서만 사용할 수 있습니다. 예를 들어 forEeach 구조에서 wait를 사용하면 for 루프의 기본 구문을 사용해야 합니다.

async function dbFuc(db) {
 let docs = [{}, {}, {}];
 // 可能得到错误结果
 docs.forEach(async function (doc) {
  await db.post(doc);
 });
}
로그인 후 복사
여러 요청을 동시에 실행하려면 Promise.all 메서드를 사용할 수 있습니다.

async function dbFuc(db) {
 let docs = [{}, {}, {}];
 let promises = docs.map((doc) => db.post(doc));
 let results = await Promise.all(promises);
 console.log(results);
}
로그인 후 복사

4. 오류 잡기

.then(..)을 쓸 필요가 없으므로 .catch(..)도 쓸 필요가 없습니다. 표준 try catch 구문을 직접 사용할 수 있습니다. 오류를 잡으려고.

var sleep = function (time) {
  return new Promise(function (resolve, reject) {
    setTimeout(function () {
      // 模拟出错了,返回 ‘error'
      reject('error');
    }, time);
  })
};
var start = async function () {
  try {
    console.log('start');
    await sleep(3000); // 这里得到了一个返回错误
    
    // 所以以下代码不会被执行了
    console.log('end');
  } catch (err) {
    console.log(err); // 这里捕捉到错误 `error`
  }
};
로그인 후 복사
이 기사의 사례를 읽으신 후 방법을 마스터하셨다고 생각합니다. 더 흥미로운 정보를 보려면 PHP 중국어 웹사이트의 다른 관련 기사를 주목하세요!

추천 자료:

Vue 계산 속성 및 리스너 사례 코드 분석

vuex와 구성 요소를 함께 사용하는 단계에 대한 자세한 설명

위 내용은 노드 Async/Await 비동기 프로그래밍 구현에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿