關於promise/async await小坑

I.如何promisify函數?javascript

let getChuckNorrisFact = (url) => {
  return new Promise((resolve, reject) => {
      request.get(url, function(error, response, data){
        if (error) reject(error);
        resolve(data);
      })
   }
 );
};

複製代碼

II.如何consume一個promise?java

法1、then和catchpromise

getChuckNorrisFact(url).then(
   data => console.log(data) // actually outputs a string
).catch(
   error => console.(error)
);
複製代碼

法2、async和awaitbash

async func ()=>{
 try(){
   let data=await getChuckNorrisFact(url);
   console.log(data);
 } catch (e) {
   console.log(e);
}
複製代碼
注意
a. await已經consume了promise自動獲取的是then的值

b.若是要catch,則是try catch方式
複製代碼

解釋 async

III.如何在promise裏面throw error?ide

3.Errors inside Callback

const example = () => {
  return new Promise((resolve, reject) => {
      service(url,(err,res)=>{
           throw new Error("test error inside promise");
           reject(false);
      }
  });
};


async function () {
 try {
 await example();
} catch (e) {
  console.error(`try/catch(${e})`);
}
}

複製代碼

這樣不行,throw捕捉不到!函數

結論:ui

  1. 永遠這樣寫 reject(new Error("message"));
  2. 或者直接reject
  3. 用then的時候永遠添加catch(Always add a .catch(…) whenever you have a .then(…))

參考url

mrcoles.com/javascript-… javascript.info/async-await www.kancloud.cn/kancloud/pr… www.freecodecamp.org/news/how-to…spa

相關文章
相關標籤/搜索