【原创】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);
    });
点赞
  1. ChipWhisperer说道:
    Google Chrome Windows 10
    https://t.me/s/iGaming_live/4866
  2. ChipWhisperer说道:
    Google Chrome Windows 10
    https://t.me/s/official_pokerdom_pokerdom
  3. AllInAce说道:
    Google Chrome Windows 10
    В лабиринте игр, где каждый ресурс норовит привлечь заверениями простых джекпотов, рейтинг онлайн казино на рубли превращается той самой ориентиром, которая направляет сквозь ловушки рисков. Для профи и начинающих, которые устал с ложных посулов, такой инструмент, дабы ощутить реальную отдачу, словно вес ценной ставки у руке. Минус лишней ерунды, только проверенные клубы, в которых выигрыш не лишь показатель, а реальная удача.Подобрано из гугловых поисков, как паутина, что захватывает наиболее свежие тенденции на интернете. Здесь минуя роли для клише приёмов, всякий момент словно ставка на игре, в котором подвох проявляется сразу. Профи понимают: на рунете стиль разговора на иронией, там ирония скрывается как рекомендацию, помогает обойти ловушек.На https://don8play.hashnode.dev/rejting-onlajn-kazino-don8play-kak-vybrat-nadyozhnyj-brend-i-ne-oshibitsya?showSharer=true этот топ находится словно открытая карта, подготовленный на старту. Зайди, коли желаешь ощутить пульс реальной ставки, без иллюзий плюс провалов. Для что любит ощущение удачи, это как держать фишки на пальцах, а не глядеть на экран.

发表回复

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