博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
promise.then
阅读量:6278 次
发布时间:2019-06-22

本文共 1728 字,大约阅读时间需要 5 分钟。

promise.then返回的是一个新的promise对象

1、如果then()方法中抛出了一个异常,那么返回的Promise将会变成拒绝状态,value是异常的reason,如下例。

new Promise((resolve, reject) => {    if (true) {        resolve();    } else {        reject();    }}).then((data) => {    resolve();}, (error) => {    reject();})then返回的promise: {   [[promiseStatus]]: 'rejected',   [[promiseValue]]: 'ReferenceError: resolve is not defined at Promise.then'}

为什么返回的是这个呢?

是因为resolve是undefined,把它当做一个函数去调用当然会报错,所以就算没有return
任何东西,此时的then返回的promise是rejected。而且,一般不能在Promise.then()中
调用resolve和reject,除非你这样写:

new Promise((resolve, reject) => {    if (true) {        resolve(resolve); // 将resolve传递下去    } else {        reject();    }}).then((data) => {    data(); // data接收了resolve函数})

2、如果then()方法中return【普通】参数值,那么返回的Promise将会变成resolved,value即是return的那个数据,如下例。

var promise2 = new Promise(function(resolve, reject) {  setTimeout(function() {    resolve('success');  }, 2000);});promise2.then(function(data) {    return 2})then返回的promise: {  [[PromiseStatus]]: "resolved"  [[PromiseValue]]: 2}

3、如果then()方法中return Promise,那这个Promise是什么状态,then返回的就是什么状态,如下例。

var promise2 = new Promise(function(resolve, reject) {  setTimeout(function() {    resolve('success');  }, 2000);});promise2.then(function(data) {    return new Promise(function(resolve, reject) { // 注意一定要写return,否则就属于第4种情况了      reject('把状态置为rejected error');     });  })then返回的promise: {  [[PromiseStatus]]: "rejected"  [[PromiseValue]]: "把状态置为rejected error"}

4、如果then方法中没有return 任何东西,那么返回的Promise就是接收状态,value是undefined,如下例。

new Promise((resolve, reject) => {    if (true) {        resolve();    } else {        reject();    }}).then(() => {  console.log('resolve')})then返回的promise: {   [[promiseStatus]]: 'resolved',   [[promiseValue]]: undefined}

转载地址:http://gifva.baihongyu.com/

你可能感兴趣的文章
Codeforces 474 D. Flowers
查看>>
Lightoj 1043 - Triangle Partitioning【二分】
查看>>
Spring Boot 概念知识
查看>>
大杂烩 -- HashMap、HashTable、ConCurrentHashMap 联系与区别
查看>>
android 自己定义标签的使用,实现扁平化UI设计
查看>>
This Activity already has an action bar supplied by the window decor
查看>>
SpringMVC之HandlerMethodArgumentResolver和<mvc:argument-resolvers>
查看>>
【LeetCode-面试算法经典-Java实现】【033-Search in Rotated Sorted Array(在旋转数组中搜索)】...
查看>>
tengine2.1.0RPM包制做 tengine-2.1.0.spec配置
查看>>
Java扫描二维码进行会议签到思路
查看>>
leetcode || 56、 Merge Intervals
查看>>
公益活动-感谢你们
查看>>
非阻塞同步算法与CAS(Compare and Swap)无锁算法
查看>>
Java编程的逻辑 (91) - Lambda表达式
查看>>
程序员找工作时应该该考察公司的一些方面
查看>>
input 呼起数字键盘
查看>>
世界杯西班牙葡萄牙慘败给创业的启发
查看>>
POJ--3164--Command Network【朱刘算法】最小树形图
查看>>
Ubuntu mysql开启远程登录的方法
查看>>
C# Tips:获得当前登录计算机的用户(本地用户/域用户)
查看>>