http://jsbin.com/suxuyil/336/edit?js,console
promise 物件包含兩個 callback function (一個成功 ok 和一個失敗 err) 會依據執行結果給出其中一個 callback
function a, b, c 都會傳出 promise (這裡都手動指定給出 ok 的 callback function)
function a (){
console.log('a')
return new Promise(function(ok, err) {
setTimeout( function(){
console.log('a 100')
ok('a 100 ok')
// err()
}, 100 );
})
}
function b (v){
console.log('b, '+v)
return new Promise(function(ok, err) {
setTimeout( function(){
console.log('b 1000')
ok('b 1000 ok')
// err()
}, 1000 );
})
}
function c (v){
console.log('c, '+v)
return new Promise(function(ok, err) {
setTimeout( function(){
console.log('c 10')
ok('c 10 ok')
// err()
}, 10 );
})
}
使用 .then()
串聯其他動作
.then()
用來接收一個 promise,也傳出一個 promise
// 這裡是前一個都 ok 的樣子:
a().then(b).then(c)
// a(*ok*).b(*ok*).c(*ok*)
// Promise(*ok*, err).Promise(*ok*, err).Promise(*ok*, err)
// 這裡是可以看到有人辣漆的樣子:
a().then( result =>{
console.log('a 提詞 ('+ result +')')
return b(result)
},(err)=>{
console.log('a ('+ err +')')
return b(err)
})
.then( result=>{
console.log('b 提詞 ('+ result +')')
return c(result)
},(err)=>{
console.log('b ('+ err +')')
return c(err)
})
async 裡面有非同步函式, await 是 async 一個運算子,可以暫停 async function 行程 so 在 async 內可以用 await 來排成同步函式
async function abc() {
var ma;
var mb;
var mc;
try {
ma = await a();
} catch (e) {
console.log('catch '+e)
ma = e
}
try {
mb = await b(ma);
} catch (e) {
console.log('catch '+e)
mb = e
}
try {
mc = await c(mb);
} catch (e) {
console.log('catch '+e)
mc = e
}
console.log('async a:'+ ma +', b: '+ mb +', c: '+ mc );
return ('async a:'+ ma +', b: '+ mb +', c: '+ mc );
}
abc()