ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

promise & async/await

2022-06-18 03:01:11  阅读:129  来源: 互联网

标签:console log await dog promise async data


promise & async/await

promise

  1. 为什么出现promise?

    回调地狱

  2. promise的三个状态

    1. pending
    2. fullfilled
    3. rejected
  3. 真正解决回调地狱

    promise里面不嵌套then

    每一个都返回一个promise再then

    const readFilePro = (file) => {
      return new Promise((resolve, reject) => {
        fs.readFile(file, (err, data) => {
          if (err) reject('I could not find that file');
          resolve(data);
        });
      });
    };
    
    readFilePro(`${__dirname}/dog.txt`)
      .then((data) => {
        console.log(`Breed: ${data}`);
        return (
          superagent
            .get(`https://dog.ceo/api/breeds/image/random`)
        );
      })
      .then((res) => {
        console.log(res.body.message);
    
        return writeFilePro('dog-img.txt', res.body.message);
      })
      .then(() => {
        console.log('Random dog image saved to file!');
      })
      .catch((err) => {
        console.log(err.message);
      });
    
  4. promise的优雅

    promise链式执行,只需要在最后catch一个error

async/await

  1. async/await返回的是promise函数
  2. 对于一个async函数,在函数前面加上await代表的是停在这里等promise为resolve状态的时候再执行下面的代码,相当于下面的代码在promise的then里面
  3. async/await捕获错误用的是try/catch
const getDogPic = async () => {
  try {
    const data = await readFilePro(`${__dirname}/dog.txt`);
    console.log(`Breed: ${data}`);

    const res = await superagent.get(
      `https://dog.ceo/api/breed/${data}/images/random`
    );
    // .get(`https://dog.ceo/api/breeds/image/random`);
    console.log(res.body.message);

    await writeFilePro('dog-img.txt', res.body.message);
    console.log('Random dog image saved to file!');
  } catch (err) {
    console.log(err.message);
    throw err;
  }
  return '2: READY';
};

promise.all

  1. promise.all返回的是多个promise执行之后的resolve值,是一个数组
const getDogPic = async () => {
  try {
    const data = await readFilePro(`${__dirname}/dog.txt`);
    console.log(`Breed: ${data}`);

    const res1Pro = await superagent.get(
      `https://dog.ceo/api/breed/${data}/images/random`
    );

    const res2Pro = await superagent.get(
      `https://dog.ceo/api/breed/${data}/images/random`
    );

    const res3Pro = await superagent.get(
      `https://dog.ceo/api/breed/${data}/images/random`
    );

    const all = await Promise.all([res1Pro, res2Pro, res3Pro]);
    const imgs = all.map((el) => el.body.message);
    console.log(imgs);

    await writeFilePro('dog-img.txt', imgs.join('\n'));
    console.log('Random dog image saved to file!');
  } catch (err) {
    console.log(err.message);
    throw err;
  }
  return '2: READY';
};

标签:console,log,await,dog,promise,async,data
来源: https://www.cnblogs.com/kihyunBlog/p/16387544.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有