Vue前端交互模式与Promise怎么使用
这篇文章主要介绍“Vue前端交互模式与Promise怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Vue前端交互模式与Promise怎么使用”文章能帮助大家解决问题。
Promise 概述
Promise 是异步编程的一种解决方案,从语法上讲,Promise 是一个对象,从它可以获取异步操作的消息。
优点:
可以避免多层异步调用嵌套问题(回调地狱)
Promise 对象提供了简洁的 API,使得控制异步操作更加容易
Promise基本用法
实例化 Promise 对象,构造函数中传递函数,该函数中用于处理异步任务
resolve 和 reject 两个参数用于处理成功和失败两种情况,并通过 p.then 获取处理结果
var p = new Promise(function(resolve,reject){ //实现异步任务... //成功时调用 resolve(); //失败时调用 reject();});p.then(function(ret){ //从resolve得到正常结果},function(ret){ //从reject得到错误信息});
基于 Promise 处理 Ajax 请求
处理原生 Ajax
function queryData(url){ return new Promise(function(resolve,reject){ var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function(){ if(xhr.readyState!=4) return; if(xhr.status == 200){ resolve(xhr.responseText); }else{ reject('出错了'); } } xhr.open('get',url); xhr.send(null); });}//调用queryData('http://localhost:3000/data').then( function (data) { console.log(data); }, function (data) { console.log(data); })
发送多次 ajax 请求(解决回调地狱)
queryData('http://localhost:3000/data') .then(function (data) { console.log(data); //异常情况可以不处理 return queryData('http://localhost:3000/data1'); }) .then(function (data1) { console.log(data1); return queryData('http://localhost:3000/data2'); }) .then(function (data2) { console.log(data2); });
then参数中的函数返回值
返回 Promise 实例对象返回的该实例对象会调用下一个 then
返回普通值返回的普通值会直接传递给下一个 then,通过 then 参数中函数的参数接收该值
Promise常用的API
1.实例方法
* p.then()得到异步任务的正确结果* p.catch()获取异常信息* p.finally()成功与否都会执行(暂时还不是正式标准)
foo() .then(function (data) { console.log(data); }) .catch(function (data) { console.log(data); }) .finally(function () { console.log('finish'); })
也可以写为:
foo() .then(function (data) { console.log(data); }, function (data) { console.log(data); }) .finally(function () { console.log('finish'); })
2.对象方法
Promise.all() 并发处理多个异步任务,所有任务都执行完成才能得到结果
//p1,p2,p3为Promise实例对象任务Promise.all([p1,p2,p3]).then((result)=>{ console.log(result);})
Promise.race()并发处理多个异步任务,只要有一个任务完成就能得到结果
Promise.race([p1,p2,p3]).then((result)=>{ console.log(result);})
关于“Vue前端交互模式与Promise怎么使用”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网行业资讯频道,小编每天都会为大家更新不同的知识点。
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341