非同步

非同步

http://jsbin.com/suxuyil/336/edit?js,console

promise

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 );
  })
}

promise then

使用 .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

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()

results for ""

    No results matching ""