首页 > 其他 > 详细

同步异步

时间:2020-07-04 20:03:39      阅读:56      评论:0      收藏:0      [点我收藏+]

1.同步API,异步API的区别(获取返回值)

同步API可以从返回值中拿到API执行的结果,但是异步API是不可以的。

1   // 同步
2   function sum (n1, n2) { 
3       return n1 + n2;
4   } 
5   const result = sum (10, 20);
1 // 异步
2 function getMsg() {
3   setTimeout(function() {
4     return {msg: ‘hello node.js‘}
5   }, 2000);
6 }
7 const msg = getMsg();
8 console.log(msg); // undefined

2. 回调函数

自己定义函数让别人去调用。

 // getData函数定义
 function getData (callback) {}
 // getData函数调用
 getData (() => {});

3. 代码执行顺序分析

console.log(‘代码开始执行‘);
setTimeout(() => {
    console.log(‘2秒后执行的代码‘);
}, 2000); 
setTimeout(() => {
    console.log(‘"0秒"后执行的代码‘);
}, 0);
console.log(‘代码结束执行‘);

技术分享图片

4. promise

promise出现的目的是解决node.js异步编程中回调地狱的问题。

let promise = new Promise((resolve, reject) => {
  setTimeout(()=> {
    if (true) {
      resolve({name: ‘张三‘})
    } else {
      reject(‘失败了‘)
    }
  }, 2000);
});
promise.then(result => console.log(result))  // {name: ‘张三‘}
      .catch(error => console.log(error)); // 失败了
const fs = require(‘fs‘);

let promise = new Promise((resolve, reject)=> {
  fs.readFile(‘./1.txt‘, ‘utf8‘, (err, result)=> {
    if( err !== null) {
      reject(err)
    } else {
      resolve(result);
    }
  })
});
promise.then((result)=> {
  console.log(result);
})

先后打印三个异步函数

 1 const fs = require(‘fs‘);
 2 function p1() {
 3   return new Promise((resolve, reject)=> {
 4     fs.readFile(‘./1.txt‘, ‘utf8‘, (err, result)=> {
 5       if( err !== null) {
 6         reject(err)
 7       } else {
 8         resolve(result);
 9       }
10       
11     })
12   });
13 }
14 function p2() {
15   return new Promise((resolve, reject)=> {
16     fs.readFile(‘./2.txt‘, ‘utf8‘, (err, result)=> {
17       if( err !== null) {
18         reject(err)
19       } else {
20         resolve(result);
21       }
22     })
23   });
24 }
25 function p3() { 
26   return new Promise((resolve, reject)=> {
27     fs.readFile(‘./3.txt‘, ‘utf8‘, (err, result)=> {
28       if( err !== null) {
29         reject(err)
30       } else {
31         resolve(result);
32       }
33     })
34   });
35 }
36 
37 p1().then(r1 => {
38   console.log(r1);
39   return p2();
40 }).then(r2 => {
41   console.log(r2);
42   return p3();
43 }).then(r3 => { 
44   console.log(r3);
45 })

技术分享图片

 

同步异步

原文:https://www.cnblogs.com/guwufeiyang/p/13236133.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!