【原创】Promise 基础

基础用法

    const p = new Promise(function (resolve, reject) {
      setTimeout(function () {
        let data = '数据库中的数据';
        resolve(data);
      }, 1000);
    });

    p.then(function (value) {
      console.log(value);
    }, function (reason) {
      console.log(reason);
    })

读文件

const fs = require('fs');

// fs.readFile('文字.txt', (err, data) => {
//   if (err) throw err;
//   console.log(data.toString());
// });

// 使用 promise 封装
const p = new Promise(function (resolve, reject) {
  fs.readFile('文字.txt', (err, data) => {
    if (err) reject(err);
    resolve(data);
  });
});

p.then(function (value) {
  console.log(value.toString());
}, function (reason) {
  console.log(reason);
});

then 的使用

  • then 方法的返回结果如果是 Promise 对象,对象状态由回调函数的执行结果决定。
  • 如果回调函数中返回结果是非 Promise 类型熟悉,状态为成功,返回值为对象的成功的值。
    const p = new Promise((resolve, reject) => {
      setTimeout(() => {
        resolve('用户数据');
        // reject('出错啦');
      }, 1000);
    });

    // then 方法的返回结果如果是 Promise 对象,对象状态由回调函数的执行结果决定
    // 如果回调函数中返回结果是非 Promise 类型熟悉,状态为成功,返回值为对象的成功的值
    const result = p.then(value => {
      console.log(value);
      return 123;
    }, reason => {
      console.log(reason);
    });

    console.log(result);

解决回调地狱的问题

const fs = require('fs');

// fs.readFile('文字.txt', (err, datat) => {
//   fs.readFile('测试.txt', (err, datae) => {
//     fs.readFile('内容.txt', (err, datac) => {
//       let result = datat + datae + datac;
//       console.log(result.toString());
//     });
//   });
// });

const p = new Promise((resolve, reject) => {
  fs.readFile('文字.txt', (err, data) => {
    resolve(data);
  });
});

p.then(value => {
  return new Promise((resolve, reject) => {
    fs.readFile('测试.txt', (err, data) => {
      resolve([value, data]);
    });
  });
}).then(value => {
  return new Promise((resolve, reject) => {
    fs.readFile('内容.txt', (err, data) => {
      value.push(data);
      resolve(value);
    });
  });
}).then(value => {
  console.log(value.join('\r\n'));
});

catch

    const p = new Promise((resolve, reject) => {
      setTimeout(() => {
        // 修改状态为失败,并设置失败值
        reject('出错啦!');
      }, 1000);
    });

    // p.then(function (value) {

    // }, function (reason) {
    //   console.error(reason);
    // });

    p.catch(reason => {
      console.warn(reason);
    });
点赞

发表回复

电子邮件地址不会被公开。必填项已用 * 标注