傳統回調函數
// demo1-callback.js
/**
如今咱們要作個事情,寫個回調函數,每秒輸出一個遞增的數字,輸出三次
普通回調函數的寫法
*/
function logNumber(n, callback){
setTimeout(() => {
console.log(n);
n++;
callback(n)
}, 1000);
}
// 如今調用它
logNumber(1, function(n){
logNumber(n, function(m){
logNumber(m, function(q){
})
})
})
Promise
// demo2-promise.js
/**
如今咱們改用promise來重寫demo1的函數
*/
// 咱們在這裏暴露那個promise以供demo3調用
function generatorLogNumber(n){
return new Promise(res => {
setTimeout(() => {
console.log(n);
n++;
res(n)
}, 1000);
})
}
// 如今使用它
generatorLogNumber(1)
.then(n => {
generatorLogNumber(n)
.then(m => {
generatorLogNumber(m)
.then(q => {
})
})
})
// 這裏把這個promise暴露出去以供demo3使用,記得把本demo的調用函數註釋掉(就是15-24行註釋掉)
module.exports = generatorLogNumber;
async/await
// demo3-async-await.js
/**
如今咱們改用更加方便的async/await方式來調用demo2的promise
*/
// 首先把那個promise引入進來
const generatorLogNumber = require('./demo2-promise.js');
(async () => {//雙括號表示當即執行的匿名函數
const n = await generatorLogNumber(1);
const m = await generatorLogNumber(n);
const q = await generatorLogNumber(m);
})()
// 能夠node demo3-async-await.js 來運行看看