promise me,一定要学会手写一个Promise(三)

一、使用Promise封装ajax请求

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>封装ajax</title>
</head>

<body>
    <script>
        function sendAjax(url, type) {
            return new Promise((resolve, reject) => {
                const xhr = new XMLHttpRequest();
                xhr.open(type, url);
                xhr.send();
                xhr.onreadystatechange = function () {
                    if (xhr.readyState === 4) {
                        if (xhr.status >= 200 && xhr.status < 300) {
                            resolve(xhr.response);
                        } else {
                            reject(xhr.status);
                        }
                    }
                }
            });
        }
        sendAjax('http://localhost:2000/server', 'get').then((
            data) => { console.log(data) },
            (err) => { console.log(err) }
        );
    </script>
</body>

</html>

二、使用Promise封装文件读取操作

/*
    封装一个函数mineReadFile 读取文件内容
    参数:path,文件路径
    返回:promise对象
*/

function mineReadFile(path) {
    return new Promise((resolve, reject) => {
        // 读取文件
        require("fs").readFile(path, (err, data) => {
            // 判断是否读取成功
            if (err) reject(err);
            resolve(data);
        });
        // .then(
        //     (data) => {
        //         console.log(data)
        //     },
        //     (err) => {
        //         console.log(err);
        //     }
        // );
    })
}

mineReadFile("./resource/readme.txt").then(
    (data) => { console.log(data.toString()) }, (err) => { console.log(err) })

三、以上方法需要的server代码

// 1. 初始化
npm init -y

// 2. 安装express
npm i express

// 3. 编写代码
// 引入express
const express = require("express");
// 创建express对象
const app = express();
// 方法
app.all('/server',(request,response)=>{
    response.setHeader("Access-Control-Allow-Origin","*");
    response.send("hello world!");
})
// 监听2000
app.listen(2000,()=>{
    console.log("服务器已启动,正在监听2000端口...");
})

// 4. 启动服务
node filename.js

四、util.promisify()方法

/*
    util.promisify 方法
    返回的是一个promise对象
*/
const util = require('util');
const fs = require('fs');
let mineReadFile = util.promisify(fs.readFile);//将fs.readFile函数promise化。

mineReadFile('./resource/readme.tt').then((value) => {
    console.log(value.toString());//错误和成功都在这个回调里
})

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值