摘要:函数将返回对象如果成功,获得响应内容如果失败,获得响应代码实现原理例异步请求一些处理为数组,因为可能同时有很多个回调同时执行和,并在它们都完成后执行获得一个由于执行较快,的将获得结果。仍在继续执行,但执行结果将被丢弃
"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; });
实现原理
//例1 function 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仍在继续执行,但执行结果将被丢弃
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/101950.html
摘要:最受欢迎的引擎是,在和中使用,用于,以及所使用的。怎么处理每个引擎都有一个基本组件,称为调用栈。也就是说,如果有其他函数等待执行,函数是不能离开调用栈的。每个异步函数在被送入调用栈之前必须通过回调队列。例如方法是在中传递的回调函数。 翻译:疯狂的技术宅 原文:www.valentinog.com/blog/engine… 从Call Stack,Global Me...
摘要:从最开始的到封装后的都在试图解决异步编程过程中的问题。为了让编程更美好,我们就需要引入来降低异步编程的复杂性。写一个符合规范并可配合使用的写一个符合规范并可配合使用的理解的工作原理采用回调函数来处理异步编程。 JavaScript怎么使用循环代替(异步)递归 问题描述 在开发过程中,遇到一个需求:在系统初始化时通过http获取一个第三方服务器端的列表,第三方服务器提供了一个接口,可通过...
摘要:最受欢迎的引擎是,在和中使用,用于,以及所使用的。单线程的我们说是单线程的,因为有一个调用栈处理我们的函数。也就是说,如果有其他函数等待执行,函数是不能离开调用栈的。每个异步函数在被送入调用栈之前必须通过回调队列。 翻译:疯狂的技术宅原文:https://www.valentinog.com/bl... 本文首发微信公众号:前端先锋欢迎关注,每天都给你推送新鲜的前端技术文章 sh...
摘要:的翻译文档由的维护很多人说,阮老师已经有一本关于的书了入门,觉得看看这本书就足够了。前端的异步解决方案之和异步编程模式在前端开发过程中,显得越来越重要。为了让编程更美好,我们就需要引入来降低异步编程的复杂性。 JavaScript Promise 迷你书(中文版) 超详细介绍promise的gitbook,看完再不会promise...... 本书的目的是以目前还在制定中的ECMASc...
摘要:为这些回调函数分别命名并分离存放可以在形式上减少嵌套,使代码清晰,但仍然不能解决问题。如果在一个结束成功或失败,同前面的说明后,添加针对成功或失败的回调,则回调函数会立即执行。 异步? 我在很多地方都看到过异步(Asynchronous)这个词,但在我还不是很理解这个概念的时候,却发现自己常常会被当做已经很清楚(* ̄ロ ̄)。 如果你也有类似的情况,没关系,搜索一下这个词,就可以得到大致...
摘要:的执行与状态无关当得到状态不论成功或失败后就会执行,原文链接参考链接对象 同期异步系列文章推荐谈一谈javascript异步javascript异步中的回调javascript异步与promisejavascript异步之Promise.resolve()、Promise.reject()javascript异步之Promise then和catchjavascript异步之async...
阅读 2485·2021-10-19 11:45
阅读 2463·2021-09-30 09:56
阅读 1431·2021-09-30 09:47
阅读 589·2019-08-30 15:53
阅读 1834·2019-08-30 15:44
阅读 583·2019-08-30 12:52
阅读 1084·2019-08-30 11:16
阅读 1605·2019-08-29 16:36