美文网首页日常刻书
ES6 中的 Promise(二)

ES6 中的 Promise(二)

作者: F_wind | 来源:发表于2021-02-09 16:27 被阅读0次

《深入理解ES6》阅读随笔

对于 Promise 中的一些基础概念,需要了解一下:

Promise 的生命周期

Promise 没有用到事件模型和回调机制,它是一个类似占位符的对象。Promise 在创建以后,会有三个状态,刚创建是 pending ,成功执行以后变更为 fulfilled,执行失败之后改变为 rejected。这些状态均不可通过编程的方式拿取到,而是在 promise 的返回对象中通过 then 的方式捕获。
凡是可以通过 then 方式获取状态的对象都称之为 thenable 对象,thenable 对象不一定都是由 promise 返回,但 promise 返回的却都是 thenable 对象。then 中有两个参数,第一个参数的位置用于放置监听执行成功的回调函数,第二个参数的位置用于放置监听执行失败的回调函数。就像下面一样:

// 这里先假设这是一个 promise 对象,后面会有具体实现 code
const readfile1 = readfile()

readfile1.then(function (data) {
    console.log('success:', data)
}, function (err) {
    console.log('err', err)
})

另外 promise 还有一个 catch 方法,用于返回执行失败的结果,等价于 then 中的第二个参数 :

const readfile1 = readfile()

readfile1.catch(function (err) {
    console.log('err', err)
})
// 上面实现等价于 
readfile1.then(_, function (err) {
    console.log('err', err)
}) 

创建未执行的 Promise

在构造 promise 对象时会创建一个构造器,构造器中有两个参数,第一个参数 resolve 放在运行成功的代码后面执行,通知执行成功;第二个参数 reject 放在运行失败的代码后面执行,通知执行失败。

// 利用 nodejs 中的异步文件读取方法来模拟
const fs = require('fs')
const readfile = function (name) {
    return new Promise((resolve, reject) => {
        const err = false
        fs.readFile(name, { encoding: 'utf-8' }, function (err, data) {
            if (err) {
                reject('no file')
            }
            resolve(data)
        })
    })
}
readfile('test1.txt').then(function (data) {
    console.log('success:', data)
}, function (err) {
    console.log('err', err)
})
console.log('begin...')
// 如果 test1.txt 文件存在,且也在当前目录下,则返回文本内容,否则返回错误,先输出 begin...

创建已处理的 Promise

Promise 除了在创建构造函数时,会在构造器中有 resolve 和 reject 两个参数外,还可以直接通过调用静态方法的方式调用 resolve 和 reject,用于直接创建已处理的 promise:

const pro1 = Promise.resolve(100)
const pro2 = Promise.reject(200)

pro1.then(function (data) {
    console.log('success:', data)
})
pro2.catch(function (err) {
    console.log('err:', err)
})
console.log('begin...')
// 执行结果:
// begin...
// success: 100
// err: 200

错误捕捉

当 promise 中出现错误时,可以通过 catch 的方式将错误捕捉到:

const pro1 = new Promise(function (resolve, reject) {
    throw new Error('err');
});
pro1.catch(function (error) {
    console.log(error);
});

相关文章

  • ES6--Promise

    学过ES6的同学大概都知道Promise,可想而知Promise在ES6中很重要。 Promise对象代表了未来将...

  • Promise浅析

    这是我自己最近学习promise的总结在ES6中Promise被列为正式规范,也是ES6中最重要的特性之一。 1....

  • Promise基础

    1、Promise是什么? promsie是ES6新增的一个特性,它已经列入ES6的正式规范中promise是抽象...

  • js sleep

    // promise 在ES6的语法中,Promise是sleep方法异步的实现一种方式,借助Promise方法可...

  • 回调地狱问题

    使用promise(es6中api)来解决回调地狱的问题。promise1、promise本身不是异步任务但是内部...

  • promise

    本文是整理阮一峰大神ES6中 Promise 的学习笔记 目录: Promise.prototype.then()...

  • Promise

    es6中有个特别的对象Promise,今天我们就来学习它,了解它。 Promise含义 Promise 是异步编程...

  • 教你如何使用ES6的Promise对象

    Promise对象,ES6新增的一个全新特性,这个是 ES6中非常重要的一个对象 Promise的设计初衷 首先,...

  • ES6 中的 Promise(二)

    《深入理解ES6》阅读随笔 对于 Promise 中的一些基础概念,需要了解一下: Promise 的生命周期 P...

  • promise和async

    Promise 回调地狱 Promise概念 Promise是ES6中新增的一个构造函数。 目的解决回调地狱的问题...

网友评论

    本文标题:ES6 中的 Promise(二)

    本文链接:https://www.haomeiwen.com/subject/dclcxltx.html