当前位置: 首页 > article >正文

express promise async await promisify

Promise 概述

Promise 是 JavaScript 中异步编程解决方案,可以解决回调函数方案中的回调地狱问题可以将 Promise 理解为容器,用于包裹异步 API的容器,当容器中的异步 API执行完成后,Promise 允许我们在容器的外面获取异步API的执行结果,从而避免回调函数嵌套。Promise 翻译为承若,表示它承若帮我们做一些事情,既然它承若了它就要去做,做就会有一个过程、就会有一个结果,结果要么是成功要么是失败。
所以在 Promise 中有三种状态,分别为等待(pending),成功(fulfilled),失败(rejected)。默认状态为等待,等待可以变为成功,等待可以变为失败状态一旦更改不可改变,成功不能变回等待,失败不能变回等待,成功不能变成失败,失败不能变成成功。

Promise.all 并发操作

Promise.all([
    readFile('D:\\work\\jjBest\\0.txt'),
    readFile('D:\\work\\jjBest\\1.txt'),
    readFile('D:\\work\\jjBest\\2.txt')
]).then(function (res) {
    console.log(res)
})

async

// 加上async就是异步函数了
返回值会自动包裹在promise中

async function run(){
    return "a"
}
Promise { 'a' } 

await

异步函数关键字 await

await 关键字后面只能放置返回 Promise 对象的 API。
await 关键字可以暂停函数执行,等待 Promise
执行完后返回执行结果 await 关键字只能出现在异步函数中。

function readFile(path){
    return new Promise(function (resolve, reject) {
        fs.readFile(path,'utf-8',function (err, data) {
            if (err){
                reject(err)
            }else {
                resolve(data)
            }
        })
    })
}

// 加上async就是异步函数了
async function run(){
    let x = await readFile('D:\\work\\jjBest\\0.txt');
    console.log(x)
    let y = await readFile('D:\\work\\jjBest\\1.txt');
    console.log(y)
    return [x,y]
}
run().then(function (res) {
    console.log(res)
})

promisify

使用promisify后,不用声明readFile的promise函数了。

const promisify = require('util').promisify
const readFile = promisify(fs.readFile)

// 加上async就是异步函数了
async function run() {
    let x = await readFile('D:\\work\\jjBest\\0.txt', "utf-8");
    console.log(x)
    let y = await readFile('D:\\work\\jjBest\\3.txt', "utf-8");
    console.log(y)
    return [x, y]
}

run().then(function (res) {
    console.log(res)
}).catch(function (err) {
    console.log(err)
})


http://www.kler.cn/a/104340.html

相关文章:

  • 如何让家居设备快速通过Matter认证?移远通信为您带来标准回答
  • 【滴滴出行安全应急响应平台DSRC2倍积分卡】
  • Spark_SQL-DataFrame数据写出以及读写数据库(以MySQl为例)
  • NPM-安装报错connect ETIMEDOUT
  • 页面html结构导出为word或pdf
  • 01. 板载硬件资源和开发环境
  • 五、W5100S/W5500+RP2040树莓派Pico<UDP Client数据回环测试>
  • 【设计模式】第3节:设计模式概论
  • 用VScode做PPT:marp插件
  • 学习笔记二十三:Deployment入门到企业实战应用
  • [moeCTF 2023] pwn
  • Azure - 机器学习:创建机器学习所需资源,配置工作区
  • Ubuntu 22.04 更新完内核重启卡在 grub 命令行解决办法
  • STM32 定时器配置不当导致误差(精度)偏大的问题发现与解决
  • 新风机小助手-风压变速器
  • Linux网络流量监控iftop
  • 已更新!宝藏教程!MYSQL-第六章节多表查询(一对一,多对多,一对多),连接查询(内,外连接),联合查询,子查询 代码例题详解这一篇就够了(附数据准备代码)
  • 番外8.2---配置/管理硬盘
  • SaveFileDialog.OverwritePrompt
  • KNN 和 SVM 图片分类 任务 代码及细节分享