回调与Promise

Promise 对象就是用于表示一个异步操作的最终状态(成功或失败)。它的流程就是在什么状态下需要执行什么样的操作。

resolve简单理解就是一步操作执行成功后的回调函数

then是Promise对象上的一个方法,它最多需要有两个参数:表示异步操作执行后的回调函数(其实就是resolve和reject回调函数)。


//传统的回调方法 用于请求数据(模拟)
function f(cb){
setTimeout(function(){
// 如果不这样写,调用f函数时,没有传递参数,执行cb()这句代码会报错,到执行项目无法执行下去。
//
// cb && cb()这种写法, 是为了保证传入cb之后,才执行cb(),如果没有传入cb, 就不会执行cb(),防止报错。
cb && cb(); //如果cb存在(存在的话必须是函数,否则会报错)就去调用cb方法
},1000);
}

//回调地狱
// f(function(){
// console.log(1);
// f(function(){
// console.log(2);
// f(function(){
// console.log(3);
// f(function(){
// console.log(4);
// f(function(){
// console.log(5);
// f(function(){
// console.log(6);
// })
// })
// })
// })
// })
// })

//方法 用于请求数据(模拟)
            function f(){
                return new Promise(resolve => {  //Promise对象接收的这个形参resolve代表成功时候要做的事
                    setTimeout(function(){
                        resolve();   //1s后调用resolve函数。就是下面的匿名函数,可以在想去调用resolve()的时候去调用就可以了
                    },1000);
                })
            }
            
            //.then方法是每个promise实例都具有的,
            f()  //调用函数f,返回一个新的promise对象
                .then(function(){  //.then后面的匿名函数就是上面的形参resolve
                    console.log(1);
                    return f();  //必须调用f(),才可以返回一个promise实例,下面才可以调用.then方法
                })
                .then(function(){
                    console.log(2);
                    return f();
                })
                .then(function(){
                    console.log(3);
                    return f();
                })
Promise自带两个参数函数,resolve和reject。语法:

new Promise( function(resolve, reject) {...} /* executor */ );
Promise构造函数执行时立即调用executor 函数,也就是function。 resolve 和 reject 两个函数作为参数传递给executor(executor 函数在Promise构造函数返回所建promise实例对象前被调用)。promise的状态有两种,成功时调用resolve函数,失败时调用reject 函数。
 
 
 
ES6用法小结:https://blog.csdn.net/qq_34645412/article/details/81170576
什么是Promise

Promise 是异步编程的一种解决方案,其实是一个构造函数,自己身上有all、reject、resolve这几个方法,原型上有then、catch等方法。

Promise对象有以下两个特点。

(1)对象的状态不受外界影响。Promise对象代表一个异步操作,有三种状态:pending(进行中)、fulfilled(已成功)和rejected(已失败)。只有异步操作的结果,可以决定当前是哪一种状态,任何其他操作都无法改变这个状态。这也是Promise这个名字的由来,它的英语意思就是“承诺”,表示其他手段无法改变。

2)一旦状态改变,就不会再变,任何时候都可以得到这个结果。Promise对象的状态改变,只有两种可能:从pending变为fulfilled和从pending变为rejected。只要这两种情况发生,状态就凝固了,不会再变了,会一直保持这个结果,这时就称为 resolved(已定型)。如果改变已经发生了,你再对Promise对象添加回调函数,也会立即得到这个结果。这与事件(Event)完全不同,事件的特点是,如果你错过了它,再去监听,是得不到结果的。
回调与Promise
function f(cb){
cb&&cb( )----------表示如果cb存在,就去调用cb ( )
}
1、new Promise(回到函数)
 .then(函数)方法是每个new Promise都有这个方法;
2、then方法指定的回调函数,将在当前脚本所有同步任务执行完才会执行
resolve对应 .then(函数)方法中的函数;
只有return了f()中的new Promise(回到函数) ,才能调用.then方法;
then( )方法都在同一层,便于修改;

相关推荐