前言 本文主要讲解promise的链式调用的方法及其最终方案 应用场景 假如开发有个需求是先要请求到第一个数据,然后根据第一个数据再去请求第二个数据,再根据第二个数据去请求第三个数据...一直到最后得到真正想要的数据,我最初的做法是 setTimeout(() => { //这里用定时器来代替发请求 //data假设为后台来的数据 let data1 = 1; console.log(data1); setTimeout(() => { let data2 = 2 + data1; conso…
1.什么是Promise Promise 对象代表了未来将要发生的事件,用来传递异步操作的消息. 2.对象的状态不受外界影响.Promise 对象代表一个异步操作,有三种状态: pending: 初始状态,不是成功或失败状态,执行中的状态 fulfilled: 意味着操作成功完成. rejected: 意味着操作失败. 3.Promise 创建 new Promise(function(resolve, reject){   //异步处理  执行完成后调用resolve  执行失败调用 reje…
let a = new Promise((resolve,reject)=>{ resolve(1) }).then((r)=>{console.log(r)}).then(()=>{console.log(2)}).then(()=>{consol.log(3)}) // 1 // 2 // 3 let b = new Promise((resolve,reject)=>{resolve(1)}).then((r)=>{  return 3}).then((r)=&g…
Promise对象是用于异步操作的. Promise的真正强大之处在于它的多重链式调用,可以避免层层嵌套回调.如果我们在第一次ajax请求后,还要用它返回的结果再次请求呢? 使用Promise,我们就可以利用then进行「链式回调」,将异步操作以同步操作的流程表示出来. 以下是个小Demo: /* e.g */ sendRequest('test1.html', '').then(function(data1) { console.log('第一次请求成功, 这是返回的数据:', data1);…
Promise的使用相比大家已经孰能生巧了,我这里就不赘述了 先说说我写的Promise的问题吧,无法实现宏任务和微任务里的正确执行(也就是在Promise里面写setTimeout,setInterval的话,输出顺序会有问题),其他的API(catch.finally.race.all)有兴趣的话,大家可以斟酌补充. 开始贴代码: // 定义一个Promise类function Promise(fn){ // 回调队列 存放的所有的.then里面的回调 this.callbacks = []…
// 1) 调用方式 new People('whr').sleep(3).eat('apple').sleep(5).eat('durian'); // 2) 打印结果 'hello, whr' -(等待3s)--> 'whr eat apple' -(等待5s)--> 'whr eat durian' // 3) 以下是代码实现 class People { constructor(name) { this.name = name; this.sayHello(); this.queue…
场景:  淘米  干净的米下锅  蒸米饭  吃米饭 ;这几个步骤是一个接着一个执行, 也就是只有前面的做完后, 才会去做后面的. 并且每一步都需要用一部分时间去执行. function deal(task, time) { return new Promise((resolve, reject) => { //每次都返回一个新的promise对象, console.log("开始" + task); setTimeout(() => { console.log(task +…
eg: this.commonLoginFun().then((res) => { if (res.errNo === 0) { const { isLogin } = res.data; if (isLogin) { this.isLogin = true; this.userPhone = res.data.phone; } else { this.isLogin = false; } } }); 在commonLoginFun中: methods:{ commonLoginFun(){ r…
var that = this;that.hello().then(res => { return that.world(res);}).then(res => { console.log(res); }) function hello(){ var that = this; var p = new Promise((resolve,reject) => { resolve('hello '); }) return p; } function world(params){ var tha…
入职百度EFE团队实习已经三周了,实习中接触到了生产环境的技术和开发流程,大开眼界,和自己在学校接小作坊式项目是很不一样的体验.其中一个很大的感触是,ES6早已不是“选修”的尝鲜技术,而是已经全面普及应用.非学不可的“必修”技术,看来该版本新加入的特性的确解决了前端项目开发中的痛点,有利于提升开发效率. 说到ES6,像let,const,箭头函数这些特性简单易懂,很快就实现了无痛上手:然而Promise不是那么直观,项目文档里大量的“返回一个Promise对象”让初接触这一概念的我一度懵比,于是…