美文网首页
初识Promise

初识Promise

作者: 橘子柚子橙子_ | 来源:发表于2018-07-09 23:22 被阅读0次

这是一篇很初级的有关Promise的知识整理,还有很多的知识点正在进行中...

什么是Promise

Promise中文的含义:许诺。为啥叫这个名字?可能是因为它的状态一旦发生,就无法再改变了,就像是做出了许诺。
参照阮一峰老师《ES6标准入门》一书中的说法:Promise是一个容器,里面保存着某个未来才会结束的事件。从语法上来说,Promise是一个对象,从它可以获取异步操作的消息。

Promise的特点

  1. 三种状态
    1.1 进行中-pending
    1.2 已成功-fulfilled
    1.3 已失败-rejected
    上面的三种状态一旦发生,就不再改变,任何时候都能得到这个结果。

  2. 无法取消
    一旦新建,就会立刻执行,无法中途取消。

  3. 可以链式调用
    根据这个特点,可以避免回调地狱

一个简单的例子

function timeout(ms) { // 返回一个Promise实例
    return new Promise((resolve, reject) => {
        setTimeout(resolve, ms, 'ok') // 当经过ms时间后,事件发生
    })
}

timeout(100).then((value) => {
    console.log(value) // ok
})

Promise解决回调地狱

阅读性不好的callBack hell

const fs = require('fs')
let data = ''
fs.readFile('a.txt', 'utf-8', (err, data_1) => { // 读取文件 a.txt
    if (err) throw err
    data += data_1
    fs.readFile('b.txt', 'utf-8', (err, data_2) => { // 读取文件 b.txt
        if (err) throw err
        data += data_2
        fs.readFile('c.txt', 'utf-8', (err, data_3) => { // 读取文件 c.txt
            if (err) throw err
            data += data_3
            console.log(data_2, data)
        })
    })
})

用Promise重写

function read(fileUrl) {
    return new Promise((resolve, reject) => {
        fs.readFile(fileUrl, 'utf-8', (error, data) => {
            error && reject(error)
            resolve(data)
        })
    })
}

let fileData = ''
read('a.txt')
.then((data) => {
    console.log(data, '文件a')
    fileData += data
    return read('b.txt')
})
.then((data) => {
    console.log(data, '文件b')
    fileData += data
    return read('c.txt')
})
.then((data) => {
    console.log(data, '文件c')
    fileData += data
    console.log(fileData)
})

.then

  1. 任何时候,then方法都会返回一个新的Promise对象
  2. 如果在then方法中,显式的return一个非Promise对象,那么这个结果就作为下一个then方法的参数
  3. 如果return返回的是一个Promise对象,就作为一个新的Promise对象来使用

.all, .race

all生成并返回一个新的Promise对象,当所有的Promise对象都成功之后,执行某些操作。如果某个promise对象变为reject,则Promise.all就会立刻终止,并返回一个reject的新的promise对象
race是指,在多个Promise对象中,只要有一个成功了,就执行某些操作

明天还有...

---continue---

相关文章

  • 35_谈谈你对promise的用法和理解

    一、初识Promise 1、什么是promise? Promise可能大家都不陌生,因为Promise规范已经出来...

  • promise

    初识Promise var promiseCount = 0 function testPromise() { ...

  • 初识Promise

    这是一篇很初级的有关Promise的知识整理,还有很多的知识点正在进行中... 什么是Promise Promis...

  • 初识promise

    Promise是ES6新出的一个构造函数,最主要的就是为了解决回调地狱的问题。Promise三个状态:pendin...

  • 初识Promise

    MDN解释Promise: 1、promise用作异步计算; 2、一个promise实例表示现在存在、将来存在或者...

  • 《Promise》

    1、初识Promise Promise 是异步操作的一种解决方案Promise 一般用来解决层层嵌套的回调函数(回...

  • promise初识及使用

    Promise 是异步编程的一种解决方案,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作...

  • 初识es6 Promise

    Promise简介 Promise 是异步编程的一种解决方案,有了Promise对象,就可以将异步操作以同步操作的...

  • JavaScript异步编程:(二)Promise初识

    前言 回调函数实现了异步编程,但是它的缺陷,让我们在复杂的流程上望而却步;Promise应运而生。 一、为什么要用...

  • Promise原理及实现

    Promise标准 Promise 规范有很多,如Promise/A,Promise/B,Promise/D 以及...

网友评论

      本文标题:初识Promise

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