promise

在JavaScript的世界中,所有代码都是单线程执行的(相当于只有一个叫js线程的人在搬货,而不是很多js线程在搬货,搬货可以解释成运行代码,只有一个人在干活,而不是多个人)

一个应用程序就是进程,进程又可以细分线程,线程还能划分线程,还有一个子进程,子进程和线程的区别就在于,进程跟子进程,是相同粒度的,举个例子,浏览器请求用world打开文件,这时world打开了文件,浏览器就是父进程,world就是子进程,浏览器里有多个窗口,这就是浏览器进程的线程,world中有多篇文档,这也相当于world进程中的线程。

进程线程详细介绍
导致JavaScript的所有网络操作,浏览器事件,都必须是异步执行。异步执行可以用回调函数实现:
关于promise教程

var startTime = Date.now();
console.log('start', startTime);

var handler = new Promise(function (resolve, reject) {
    setTimeout(function () {
        //resolve('done')
        reject('done')
    }, 500);
}); 
handler.then(function (val) {
    console.log('then resolve', val, Date.now() - startTime);
}, function (e) {
    console.log('then reject', e, Date.now() - startTime);
});

上面那个是比较简单的例子,下面来看一下promise的实际运用的例子
xhr.js

//接收param对象然后用object.entries转换成二维数组,二维数组长度由对象中的属性数量相等,一个属性就是一个
//一维数组,数组的第一个元素属性名
var dealParams = param => {
    let result = '';
    for(let [key, value] of Object.entries(param)) {
        result += `${key}=${value}&`
    }
    return result.replace(/&$/, '');
}

class XHR {
    get(url, params) {
        if(params) {
            url = `${url}?${dealParams(params)}`
        }
        return new Promise((resolve, reject) => {
            const xhr = new XMLHttpRequest();
            xhr.open('get', url, true);
            xhr.setRequestHeader('content-type', 'application/json');
            xhr.send(null);
            xhr.onreadystatechange = () => {
                if(xhr.readyState === 4) {
                    if(xhr.status >= 200 && (xhr.status < 300 || xhr.status === 304)) {
                        // JSON.parse(arr) will be mistaked if arr is undeinfed;
                        if(xhr.responseText) {
                            resolve(JSON.parse(xhr.responseText));
                        } else {
                            resolve(xhr.responseText);
                        }
                    } else {
                        reject(`XHR unsuccessful:${xhr.status}`);
                    }
                }
            };
        });
    }
}

export default new XHR().get

这个文件返返一个xhr类的匿名对象的get方法,这个get方法又返回一个promise对象
在另一个文件中调用这个方法

//@表示上一个目录
import get from '@/assets/js/xhr.js'
//// xhr对象的get方法这个方法返回一个promise对象,就可以传成功resolve函数回调和失败reject回调
get('https://cnodejs.org/api/v1/topics', {
            page: 1,
            limit: number,
            mdrender: 'false',
 }).then((res) => {
     context.commit('addArticleLists', res.data)
 }).catch((res) => {
     console.log('MaiSec.vue: ', res);
 });
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值