Promise

85 阅读1分钟

简介:

Promise是异步编程,它的出现是用来解决回调地狱(callback),Promise对象用来封装一个异步操作,异步方法不是立即返回最终值,而是返回在将来某个时间点提供值的Promise。

Promise 对象表示异步操作的最终完成(或失败)及其结果值。

基本语法:

   new Promise(function (resolve, reject) { console.log("Run"); });

Promise的三种状态

  • 待定:初始状态,既不满足也不拒绝。

  • 已实现:表示操作已成功完成。

  • 拒绝:表示操作失败。

image.png

Promise的作用

在没有Promis之前,我们在回调中有另一个异步操作的时候,我们就只能使用嵌套的方式来解决,而Promise里面有一个then方法返回,它最多需要有廖哥参数:Promise 的成功和失败情况的回调函数。

这里作者使用 Node.js 做例子:

    const fs = require('fs');

    fs.readFile('为学.md',(err,data1) => {
        fs.readFile('插秧诗.md',(err,data2) => {
            fs.readFile('观书有感.md',(err,data3) => {
                let result = data1  + '\r\n' + data2  + '\r\n'+data3;
                console.log(result);
            })
        })
    })

image.png

再使用 Promise 这样解决:

    // 使用 promise 实现
    const p = new Promise((resolve, reject) => {
        fs.readFile("为学.md",(err,data) => {
            resolve(data);
        })
    });

    p.then(value=>{
        return new Promise((resolve, reject) => {
            fs.readFile('插秧诗.md',(err,data) => {
                resolve([value,data]);
            })
        })

    }).then(value =>{
        return new Promise((resolve, reject) => {
            fs.readFile('观书有感.md',(err,data) => {
                // 压入
                value.push(data);
                resolve(value);            
            });
        });
    }).then(value =>{
        // console.log(value.toString());
        console.log(value.join('\r\n'));
    })

结果如上图一样,虽然书写变得麻烦了一些,但是这样可以避免回调地狱,代码更有清晰度。