慕容的工作随笔

慕容的工作随笔

记录学习和工作

【原创】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);
})</code></pre>

读文件

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 =&gt; {
  console.log(value);
  return 123;
}, reason =&gt; {
  console.log(reason);
});

console.log(result);</code></pre>

解决回调地狱的问题

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 =&gt; {
  console.warn(reason);
});</code></pre>

评论 (0)

还没有评论,来做第一个吧。

发表评论

提交后需管理员审核通过后显示