前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Promise基础使用

Promise基础使用

作者头像
Sarlren
发布2022-10-28 11:27:57
4030
发布2022-10-28 11:27:57
举报
文章被收录于专栏:Sarlren的笔记

Promise被用于异步请求调用。

异步请求有几种,

文件操作,fs

nodejs里读取文件的代码示例如下:

代码语言:javascript
复制
require('fs').readFile(path, (err, data) => {
    yourDealWithData()
})

数据库操作

AJAX

这里简单写写AJAX的例子。AJAX分四步,创建对象:

代码语言:javascript
复制
const xhr = new XMLHttpRequest()

初始化,设置方式和链接:

代码语言:javascript
复制
xhr.responseType = 'json' // 这步可选
xhr.open('GET', 'http://www.baidu.com')

发送:

代码语言:javascript
复制
xhr.send()

处理结果:

代码语言:javascript
复制
xhr.onreadystatechange = () => {
    if (xhr.readyStatus === 4 && xhr.status >= 200 && xhr.status <= 300) {
        console.log(xhr.response)
    }else {
        console.log(xhr.status)
    }
}

定时器


1.Promise基础用法

直接给出例子,下面异步启动一个计时器。

代码语言:javascript
复制
var a = 50
const p = new Promise((resolve, reject) => { // 两个参数,分别对应成功失败
    setTimeOut(() => { // 这里内部写了一个计时器
        a = yourTargetNumber
        if (a > 60) {
            resolve(a) // 成功分支,不传参数就是直接成功,传参数可以给then接着使用
        }else {
            reject(a)
        }
    }, 1000)
})

p.then((resolveValue) => { // 第一个是成功参数,不写也可以
    print($'resolve!{resolveValue}')
}, (rejectValue) => {
    print($'reject for {rejectValue}')
})

2.封装函数变成Promise风格

例子就是将文件操作封装,其中引入util.promisify。见下:

代码语言:javascript
复制
const util = require('util')
const fs = require('fs')

let myReadFile = util.promisify(fs.readFile) // 这行将函数变成我们想要的函数变量,外面套一个promisify。

myReadFile(path).then(value => { // 此处的then就是promise风格的
    console.log(value)
})

上面的封装比较快捷。如果想封装AJAX,就需要显式地写一个function了。

代码语言:javascript
复制
function myAJAX(url) {
    return new Promise((resolve, reject) => {
        All your AJAX operations.
    })
}

myAJAX('http://www.baidu.com').then(value => {}, reason => {})//使用

3.promise一些语法糖

promise可以对一个多promise数组进行调用,里面有all方法,当全都返回resolve才resolve。 当promise多重嵌套的时候,即p.then().then().then()嵌套下去,某个then里面的reject可以不一定在下一个then里面处理,在最后一个then里面处理即可。 如果像上面的promise嵌套想要中止,在想中止的then里面return new Promise(() => {})即可。


async和await能用来简化代码,await可以直接放在等号右边,而等号左边直接是异步获得的信息。 其中await应该后跟一个Promise对象,async用来放到function关键字前面表示异步。当await读取到reject则需要try-catch捕获。例子如下:

代码语言:javascript
复制
async function main() {
    try{
        let data1 = await myReadFile(path1) // myReadFile同上
        let data2 = await myReadFile(path2)
        let data3 = await myReadFile(path3) 
        console.log(data1 + data2 + data3)
    }catch (err) {
        console.log(err)
    }
}
main()

这同样可以封装AJAX。例子如下:

代码语言:javascript
复制
let btn = document.querySelector('#btn')
btn.addEventListener('click', **async** function() {
    let content = await sendAJAX(url) // 和上述sendAJAX一致
    console.log(content)
})
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-01-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文件操作,fs
  • 数据库操作
  • AJAX
  • 定时器
    • 1.Promise基础用法
      • 2.封装函数变成Promise风格
        • 3.promise一些语法糖
        相关产品与服务
        数据库
        云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档