promise是什么?

promise是什么?
Promise是异步编程的一种解决方案,比传统的回调函数和事件更合理和强大。说得通俗一点就是一种写代码的方式,并且是用来写JavaScript编程中的异步代码的。
在没有promise前使用回调函数处理异步问题是,最大的问题就是回调地狱,也就是嵌套太深。如下:

setTimeout(function(){
    console.log(1);
    setTimeout(function(){
        console.log(2);
        setTimeout(function(){
            console.log(3);
        },2000);
    },2000);
},2000);

所以出现了promise,很好的解决了回调地狱的问题。
使用 promise来改写的代码,如下:

new Promise(function (resolve, reject) {
    setTimeout(function () {
        console.log(1);
        resolve(2);
    }, 2000)
}).then(function (data) {
    return new Promise(function (resolve, reject) {
        setTimeout(function () {
            console.log(data);
            resolve(3);
        },2000)
    })
}).then(function(data){
    setTimeout(function () {
        console.log(data);
    },2000);
})

基本用法

let p = new Promise((resolve, reject) => {
  if (/* true 或者 false */) {
    resolve(value)
  } else {
    reject(error)
  }
})
p.then(function(value) {
    // 如果p的状态被resolve了,就进入这里
}, function(error) {
    // 如果p的状态被reject
})

一般学习Promise看到的第一段代码就是上面这样的。
Promise构造函数接受一个函数作为参数,该函数的两个参数分别是resolve和reject。它们是两个函数,由JavaScript引擎提供,不用自己部署。

resolve函数的作用是,将Promise对象的状态从"未完成"变成"成功"。(即从pending变为resolved)。在异步操作成功的时候调用,并将异步操作结果作为参数传递出去;

reject函数的作用是,将promise对象的状态从"未完成"变成"失败"(即从pending变为rejected)。在异步操作失败时调用,并将异步操作报出的错误,作为参数传递出去。

Promise实例生成后,可以用then方法分别指定resolve状态和rejected状态的回调函数。

then方法可以接受两个回调函数作为参数,
第一个回调函数是promise对象的状态变为resolved的时候调用,
第二个回调函数是promise对象的状态变为rejected时调用。
其中第二个函数是可选的。这两个函数都接受Promise对象传出的值作为参数。
还有一种写法是通过 catch 来捕获失败的情况

let pm = new Promise(function (resolve, reject) {
    // resolve();
    reject();
})
pm.then(function () {
	// resolve 会进入到第一个 function
    console.log("成功");
}, function () {
	// reject 会进入到第二个 function
    console.log("失败");
});

当promise 状态变为resolved时,输出“成功”,当promise 状态变为reject时,输出“失败”。

let pm = new Promise(function (resolve, reject) {
    // resolve();
    reject();
})
pm.then(function () {
	// resolve 会进入到第一个 function
    console.log("成功");
}).catch(function(){
    // reject 进入到 catch 方法里面
    console.log('失败');
});

resolved()reject()都可以向下传参

let pm = new Promise(function (resolve, reject) {
	resolve("value");
})
pm.then(function (data) {
	console.log(data);
}).then(function (data) {
	console.log(data);
});

最后输出value。
以上仅为个人见解,如有错误望指出。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值