ES6之Promise对象

【图书介绍】《Node.js+MongoDB+Vue.js全栈开发实战》-CSDN博客

《Node.js+MongoDB+Vue.js全栈开发实战(Web前端技术丛书)》(邹琼俊)【摘要 书评 试读】- 京东图书 (jd.com)

Promise是ES 6中新增的一种异步编程的解决方案,它可以将异步操作队列化,让操作按照期望的顺序执行,最终返回符合预期的结果。同时,可以在对象之间传递和操作Promise,帮助我们处理队列。

Promise出现的目的是解决Node.js异步编程中回调地狱的问题。什么是回调地狱呢?要把一个函数a作为回调函数,但是该函数又把函数b作为参数,而函数b又把函数c作为参数,这样的层层嵌套称之为回调地狱。回调地狱的代码阅读性非常差。

Promise是一个对象,它并未剥夺函数return的能力,因此无须层层传递callback进行回调来获取数据。

Promise的基本结构:Promise((resolve, reject)。

  1. Resolve的作用是将Promise对象的状态从"未完成"变为"成功"(即从pending变为resolved),在异步操作成功时调用,并将异步操作的结果作为参数传递出去。
  2. Reject的作用是将Promise对象的状态从"未完成"变为"失败"(即从pending变为rejected),在异步操作失败时调用,并将异步操作报出的错误作为参数传递出去。

Promise有3个状态:

(1)pending(待定),是初始状态。

(2)resolved(已完成),又称fulfilled(实现),表示操作成功。

(3)rejected(被否决),表示操作失败。

当Promise状态发生改变时,就会触发then()里的响应函数来处理后续操作。Promise状态一经改变,不会再变。

下面用示例来演示Promise的基本用法。

(1)新建文件promise.js,添加如下代码:

复制代码
const fs = require('fs');
let promise = new Promise((resolve, reject) => {
  setTimeout(() => {
    if (true) {
      resolve({ name: '张三丰' });
    } else {
      reject('失败');
    }
  }, 1000);
});
promise
  .then(
    (result) => console.log(result) // {name: '张三丰'})
  )
  .catch((error) => console.log(error)); // 失败

(2)通过Promise的方式来实现前面3.6.3节中回调的例子,在promise.js中添加如下代码:

复制代码
const fs = require('fs');
//封装Promise对象到方法中
function p1() {
  return new Promise((resolve, reject) => {
    fs.readFile('a.txt', 'utf8', (err, res) => {
      resolve(res);
    });
  });
}
function p2() {
  return new Promise((resolve, reject) => {
    fs.readFile('b.txt', 'utf8', (err, res) => {
      resolve(res);
    });
  });
}
//调用
p1()
  .then((res) => {
    console.log(res);
    return p2();
  })
  .then((res) => {
    console.log(res);
  });

(3)执行node promise.js,结果如下:

复制代码
PS D:\WorkSpace\node_mongodb_vue3_book\codes\chapter3> node promise.js
a文件是独孤九剑
b文件是吸星大法
相关推荐
小小小小宇2 小时前
虚拟列表兼容老DOM操作
前端
悦悦子a啊2 小时前
Python之--基本知识
开发语言·前端·python
安全系统学习3 小时前
系统安全之大模型案例分析
前端·安全·web安全·网络安全·xss
涛哥码咖4 小时前
chrome安装AXURE插件后无效
前端·chrome·axure
OEC小胖胖4 小时前
告别 undefined is not a function:TypeScript 前端开发优势与实践指南
前端·javascript·typescript·web
行云&流水4 小时前
Vue3 Lifecycle Hooks
前端·javascript·vue.js
Sally璐璐4 小时前
零基础学HTML和CSS:网页设计入门
前端·css
老虎06274 小时前
JavaWeb(苍穹外卖)--学习笔记04(前端:HTML,CSS,JavaScript)
前端·javascript·css·笔记·学习·html
灿灿121385 小时前
CSS 文字浮雕效果:巧用 text-shadow 实现 3D 立体文字
前端·css
烛阴5 小时前
Babel 完全上手指南:从零开始解锁现代 JavaScript 开发的超能力!
前端·javascript