同步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
自己定义函数让别人去调用。
// getData函数定义 function getData (callback) {} // getData函数调用 getData (() => {});
console.log(‘代码开始执行‘); setTimeout(() => { console.log(‘2秒后执行的代码‘); }, 2000); setTimeout(() => { console.log(‘"0秒"后执行的代码‘); }, 0); console.log(‘代码结束执行‘);
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