// 非同步的程式 function delayAdd(n1,n2,sec) { setTimeout(function name(params) { return n1 + n2 },sec) } function test(params) { let result=delayAdd(1,2,2000) console.log(result) }
解決方式
回呼函式 Callbacks
1 2 3 4 5 6 7 8 9 10
function delayAdd(n1,n2,sec,callback) { setTimeout(function (params) { callback(n1 + n2) },sec) } function test(params) { delayAdd(1,2,2000,function (result) { console.log(result) }) }
Promise
創建 new Promise
reslove 對應 than
reject 對應 cath
1 2 3 4 5 6 7 8 9 10 11 12 13
function delayAdd(n1,n2,sec) { return new Promise(function (reslove,reject) { setTimeout(function (params) { reslove(n1 + n2) },sec) }) } function test(){ let promise=delayAdd(1,2,2000) promise.then(function (result) { console.log(result) }) }
Promise.all
1 2 3 4 5 6 7
function test(params) { let promise1=delayAdd(1,2,2000) let promise2=delayAdd(3,4,3000) Promise.all([promise1,promise2]).then(function (results) { console.log(results) }) }
Async/Await
本質還是 Promise,簡化 Promise 的語法糖。
1 2 3 4 5 6 7 8 9 10 11
function delayAdd(n1,n2,sec) { return new Promise(function (reslove,reject) { setTimeout(function (params) { reslove(n1 + n2) },sec) }) } async function test(params) { let result=await delayAdd(1,2,2000) console.log(result) }