Home > Web Front-end > JS Tutorial > Detailed explanation of node Async/Await asynchronous programming implementation

Detailed explanation of node Async/Await asynchronous programming implementation

php中世界最好的语言
Release: 2018-05-22 11:46:30
Original
2140 people have browsed it

This time I will bring you node Async/Await asynchronous Programming Detailed implementation, what are the precautions for node Async/Await asynchronous programming implementation, the following is a practical case, let's come together take a look.

1. The ultimate solution to asynchronous programming

I wrote an article about javascript asynchronous operations a few days ago. Detailed explanation of Javascript Promise. Recently, when I was learning Puppeteer, I discovered another asynchronous programming solution: Async/Await. program to try to solve this problem. From the earliest

callback function

, to the Promise object, and then to the Generator function, there are improvements every time, but it feels incomplete. They all have additional complexities and require an understanding of the underlying underlying operating mechanisms of the abstraction. After the Async function came out, some people thought it was the ultimate solution to asynchronous programming. Because with Async/Await, you don't have to worry about whether it is asynchronous programming.

2. Basic UsageThe async function returns a Promise object, and you can use the then method to add a callback function. When the function is executed, once it encounters await, it will return first, wait until the triggered asynchronous operation is completed, and then execute the subsequent statements in the function body.

The following is a chestnut:

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();
Copy after login

Execute the above code, you will find that the console first outputs start, and after waiting for 3 seconds, it outputs end.

3. Notes1. The await command can only be used in async functions. If used in ordinary functions, an error will be reported. .

async function dbFuc(db) {
 let docs = [{}, {}, {}];
 // 报错
 docs.forEach(function (doc) {
  await db.post(doc);
 });
}
Copy after login

2. Await means waiting for the promise to return the result before continuing execution.

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'
};
Copy after login

3. await should be followed by a promise object.

If the code is executed synchronously, there is no need to use await modification.

4. Await can only be used in native syntax. For example, using await in the forEeach structure will not work properly. You must use the native syntax of the for loop.

async function dbFuc(db) {
 let docs = [{}, {}, {}];
 // 可能得到错误结果
 docs.forEach(async function (doc) {
  await db.post(doc);
 });
}
Copy after login

If you really want multiple requests to be executed concurrently, you can use the Promise.all method.

async function dbFuc(db) {
 let docs = [{}, {}, {}];
 let promises = docs.map((doc) => db.post(doc));
 let results = await Promise.all(promises);
 console.log(results);
}
Copy after login

4. Error capturingSince there is no need to write .then(..), then there is no need to write .catch(..) either , you can directly use the standard try catch syntax to catch errors.

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`
  }
};
Copy after login

I believe you have mastered the method after reading the case in this article. For more exciting information, please pay attention to other related articles on the php Chinese website!

Recommended reading:

vue computed properties and listener case code analysis


Detailed explanation of steps to use vuex and components together

The above is the detailed content of Detailed explanation of node Async/Await asynchronous programming implementation. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template