【js】async和await使用

摘自http://es6.ruanyifeng.com/#docs/async#co模塊es6

關於asyncawait使用

我的理解:在每個函數前面的都加上async,函數內部,若是是異步操做,直接在其前面加上await便可,等待一步函數執行的結果。await後面能夠接任何變量,能夠是常量或者promiseasync修飾的函數自動變成一個promise.正常狀況下,await命令後面是一個 Promise 對象。若是不是,會被轉成一個當即resolve的 Promise 對象。c#

//通過async修飾以後,自動變成promise對象
async function f() {
  return 'hello world';
}

f().then(v => console.log(v))
// "hello world"

async function f() {
  return await 123;
}

f().then(v => console.log(v))
// 123
//錯誤處理 
async function f() {
  throw new Error('出錯了');
}

f().then(
  v => console.log(v),
  e => console.log(e)
)
// Error: 出錯了

async中錯誤處理

//使用catch捕捉錯誤
async function f() {
  await Promise.reject('出錯了');
}

f()
.then(v => console.log(v))
.catch(e => console.log(e))
// 出錯了
async function main() {
  try {
    var val1 = await firstStep();
    var val2 = await secondStep(val1);
    var val3 = await thirdStep(val1, val2);

    console.log('Final: ', val3);
  }
  catch (err) {
    console.error(err);
  }
}
//使用async控制指定時間打印
function timeout(ms) {
  return new Promise((resolve) => {
    setTimeout(resolve, ms);
  });
}

async function asyncPrint(value, ms) {
  await timeout(ms);
  console.log(value)
}

asyncPrint('hello world', 50);

多種形式

const foo = async function(){}
async function foo(){}
const foo = async () => {};

併發處理

let foo = await getFoo();
let bar = await getBar();
//======================
// 寫法一
let [foo, bar] = await Promise.all([getFoo(), getBar()]);

// 寫法二
let fooPromise = getFoo();
let barPromise = getBar();
let foo = await fooPromise;
let bar = await barPromise;
//使用下面的方式是,使一步操做同時觸發。最上面的方式是同步執行。


//併發執行的方式選擇
async function dbFuc(db) {
  let docs = [{}, {}, {}];
  let promises = docs.map((doc) => db.post(doc));

  let results = await Promise.all(promises);
  console.log(results);
}

// 或者使用下面的寫法
//使用for循環控制了使用await的時間
async function dbFuc(db) {
  let docs = [{}, {}, {}];
  let promises = docs.map((doc) => db.post(doc));

  let results = [];
  for (let promise of promises) {
    results.push(await promise);
  }
  console.log(results);
}
相關文章
相關標籤/搜索