博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
javascript的promise
阅读量:6964 次
发布时间:2019-06-27

本文共 1959 字,大约阅读时间需要 6 分钟。

'use strict';// ajax函数将返回Promise对象:function ajax(method, url, data) {    var request = new XMLHttpRequest();    return new Promise(function (resolve, reject) {        request.onreadystatechange = function () {            if (request.readyState === 4) {                if (request.status === 200) {                    resolve(request.responseText);                } else {                    reject(request.status);                }            }        };        request.open(method, url);        request.send(data);    });}var log = document.getElementById('test-promise-ajax-result');var p = ajax('GET', '/api/categories');p.then(function (text) { // 如果AJAX成功,获得响应内容    log.innerText = text;}).catch(function (status) { // 如果AJAX失败,获得响应代码    log.innerText = 'ERROR: ' + status;});
实现原理
//例1function getUserId() {    return new Promise(function(resolve) {        //异步请求        http.get(url, function(results) {            resolve(results.id)        })    })}getUserId().then(function(id) {    //一些处理})function Promise(fn) {    var value = null,        callbacks = [];  //callbacks为数组,因为可能同时有很多个回调    this.then = function (onFulfilled) {        callbacks.push(onFulfilled);    };    function resolve(value) {        callbacks.forEach(function (callback) {            callback(value);        });    }    fn(resolve);}
Promise.all()
var p1 = new Promise(function (resolve, reject) {    setTimeout(resolve, 500, 'P1');});var p2 = new Promise(function (resolve, reject) {    setTimeout(resolve, 600, 'P2');});// 同时执行p1和p2,并在它们都完成后执行then:Promise.all([p1, p2]).then(function (results) {    console.log(results); // 获得一个Array: ['P1', 'P2']});
Promise.race()
var p1 = new Promise(function (resolve, reject) {    setTimeout(resolve, 500, 'P1');});var p2 = new Promise(function (resolve, reject) {    setTimeout(resolve, 600, 'P2');});Promise.race([p1, p2]).then(function (result) {    console.log(result); // 'P1'});//由于p1执行较快,Promise的then()将获得结果'P1'。p2仍在继续执行,但执行结果将被丢弃

转载地址:http://dawsl.baihongyu.com/

你可能感兴趣的文章
js方法名不同但是操作相同,这类方法整合
查看>>
cisco ASA 防火墙安全算法原理和基本配置 (二)
查看>>
ruby on rails 删除上传后的文件
查看>>
创建uuid,备用
查看>>
JAVA POST请求(https)
查看>>
python操作excel表格
查看>>
JAVA 枚举妙用
查看>>
MySQL在线导出文件报错
查看>>
QCon所见和所得:杭州QCon热门技术话题分享
查看>>
图表(Chart & Graph)你真的用对了吗?
查看>>
做好软件项目验收管理4步走
查看>>
有关dubbo线程池溢出
查看>>
springmvc框架
查看>>
安装Spket插件到Eclipse
查看>>
学习笔记(四)——目录命令、rm 等常用命令、查看文本命令、文件属性
查看>>
Vue知识点整理
查看>>
python笔试题---实践知识点
查看>>
spring boot 2.x data redis 使用也太简单了吧
查看>>
php超时时间说明
查看>>
spring cron表达式及解析过程
查看>>