goldEli / Front-End-Training

Front End Training
2 stars 5 forks source link

Promise #68

Open goldEli opened 4 years ago

goldEli commented 4 years ago

Promise 是用来做什么的?怎么用?附上示例代码。

FireDragonZL commented 4 years ago

Promise对象是ES6原生对象,主要用于传递异步操作的消息。 使用流程:

lurasso commented 4 years ago

Promise 是异步编程的一种解决方案,在异步执行的时候可以把执行代码和处理结果的代码清晰地分离开,解决回调地狱的痛点

let p = new Promise((resolve, reject) => {
        //做一些异步操作
      setTimeout(function(){
            var num = Math.ceil(Math.random()*10); //生成1-10的随机数
            if(num<=5){
                resolve(num);
            }
            else{//reject是执行失败的回调方法
                reject('数字太大了');
            }
      }, 2000);
    });
    p.then((data) => {
            console.log('resolved',data)
            //这里有一个未经定义的变量abc
            console.log(abc)
        }
    ).catch((err) => {
            console.log('rejected',err);
        })

p是一个promise对象,提供了then 方法以访问其当前值、终值和据因,相当于一个自定义的回调函数 catch方法是在then中的代码出错后不会报错卡死js,会进入到catch方法中 最终输出 :

Promise {<pending>}
VM202:14 resolved 4
VM202:17 rejected ReferenceError: scsa is not defined
    at <anonymous>:14:55