关于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

相关文章
相关标签/搜索