首页 ›  文章

记录Promise的实践

2019-08-15

需求就是常见的缓存,如果有缓存使用缓存,没有api拉.

1.链式,逻辑清晰

P.then().then().catch()

2.then chain如果中间不想返回了怎么办

Promise.reject in then

3.Promisify,既支持回调,又支持Promise

就是function还是有callback但是整体作为1个Promise返回.

这里用async包装,和new Promise一个效果.

async函数就是返回Promise.

fetchImgUrl: async function (url, fn, cached = true) {
    if (cached) {
      //Best practice for Promise then chain with async/await ....
      return await cache.store.getItem(url).then(value => {
        if (!value) {
          console.log('1st time');
          return api.get(url + '?json=true', {})
        } else {
          fn(value);
          // 中断then链条,
          // throw error to stop then chain
          // throw new Error('Already cached')
          //or reject , better
          return Promise.reject('Already cached');
        }
      }).then((response) => {
          console.log(response)
          fn(response.data.url);
          return response.data.url;
      }).then(response => {
          cache.store.setItem(url, response)
          console.log(`cache: ${response} ok`);
      }).catch(e => {
        console.log(e);
      })
    } else {
      return axios.get(url + '?json=true', {}).then((response) => {
          fn(response.data.url);
        }
      ).catch(e=>{
        console.log(e);
      });
    }
原文链接:segmentfault.com

上一篇:React Hook起飞指南
下一篇:10行代码实现小程序支付功能!丨实战
相关文章

首次访问,人机识别验证

扫描下方二维码回复 1024 获取验证码,验证完毕后 永久 无须验证

操作步骤:[打开微信]->[扫描上侧二维码]->[关注 FedJavaScript 的微信] 输入 1024 获取验证码

验证码有误,请重新输入