面试官:根据promiseA+规范,promise.resolve(obj)中obj有几种可能?

news/2024/7/19 14:37:15 标签: js, javascript

文章目录

  • Promise.resolve 方法,Promise.reject 方法
  • 总结一下:Promise.resolve方法的参数分为四种情况
      • 1.参数是一个Promise实例
      • 2.参数是一个thenable对象
      • 3.参数不是具有then方法的对象或根本不是对象
      • 4.不带有任何参数

菜鸟教程之promise

tips:阅读本文之前,应该对promise有初步的认识和了解。

Promise.resolve 方法,Promise.reject 方法

有时需要将现有对象转为Promise对象,Promise.resolve方法就起到这个作用。

js">var jsPromise = Promise.resolve($.ajax('/whatever.json'));

上面代码将 jQuery 生成 deferred 对象,转为一个新的 ES6 的 Promise 对象。

如果 Promise.resolve 方法的参数,不是具有 then 方法的对象(又称 thenable 对象),则返回一个新的 Promise 对象,且它的状态为fulfilled。

js">var p = Promise.resolve('Hello'); 
p.then(function (s){  console.log(s) }); // Hello

上面代码生成一个新的Promise对象的实例p,它的状态为fulfilled,所以回调函数会立即执行,Promise.resolve方法的参数就是回调函数的参数。

如果Promise.resolve方法的参数是一个Promise对象的实例,则会被原封不动地返回。

Promise.reject(reason)方法也会返回一个新的Promise实例,该实例的状态为rejected。Promise.reject方法的参数reason,会被传递给实例的回调函数。

js">var p = Promise.reject('出错了');  
p.then(null, function (s){  
    console.log(s) 
}); // 出错了

上面代码生成一个Promise对象的实例,状态为rejected,回调函数会立即执行。

总结一下:Promise.resolve方法的参数分为四种情况


1.参数是一个Promise实例

如果参数是Promise实例,那么Promise.resolve将不做任何修改,原封不动地返回这个实例。

2.参数是一个thenable对象

thenable对象指的是具有then方法的对象,比如下面这个对象。

js">let thenable = {
	then: function(resolve, reject){
        resolve("ok")
    }
}

Promise.resolve方法会将这个对彖转为Promise对象,然后立即执行thenable对象的then方法。返回的promise会“跟随”这个thenable的对象,采用它的最终状态;

js">let thenable = {
	then: function(resolve, reject){
        console.log("thenable被执行")
        resolve("ok")
    }
}


let p = Promise.resolve(thenable);

p.then((res)=>{
    console.log(res); // ok
})

3.参数不是具有then方法的对象或根本不是对象

如果参数是一个原始值,或者是一个不具有then方法的对象,那么Promise.resolve方法返回一个新的Promise对象,状态为Resolved。

js">let p = Promise.resolve("ok")
p.then(res=>{
	console.log(res); // ok
});

4.不带有任何参数

Promise.resolve方法允许在调用时不带有任何参数,而直
接返回一个Resolved状态的Promise对象。

js">let p = Promise.resolve();
p.then(()=>{
	console.log("ok")
})

http://www.niftyadmin.cn/n/555116.html

相关文章

用 JS 日期获取当前月的最后一天遇到的坑

为了更好的讲这节的内容,如果提示一个 JS 处理日期的小技巧,想获取上个月最后一天,只需要设置SetDate参数为0即可。 var endDate new Date(); //上个月最后一天 endDate.setDate(0); 接着正文开始: 使用 JS 获取当前月的最后一…

1.1jQuery简介

课程概要 认识jQuery引入jQueryjQuery语法 认识jQuery jQuery: jQuery库可以通过一行简单的标记被添加到网页中什么是jQuery: jQuery是一个JavaScript函数库jQuery库包含的功能: HTML元素选取HTML元素操作CSS操作HTML事件函数JavaScript特…

npm换源的几种姿势

文章目录使用淘宝 NPM 镜像(CNPM)单次使用永久更换镜像直接命令行的设置手动修改设置恢复原来的镜像使用淘宝 NPM 镜像(CNPM) 大家都知道国内直接使用 npm 的官方镜像是非常慢的,这里推荐使用淘宝 NPM 镜像。 淘宝 NPM 镜像是一个完整 npmjs.org 镜像,…

5个 JS 解构有趣的用途

作者:Dmitri Pavlutin 译者:前端小智 来源:dmitripavluti 为了保证的可读性,本文采用意译而非直译。 1. 交换变量 通常交换两个变量的方法需要一个额外的临时变量,来看看例子: let a 1; let b 2; let temp;temp …

面试官:动手实现一个左右固定100px,中间自适应的三列布局?(至少三种)

文章目录1、用calc2、用flex3、用padding<div id"father"><div id"son"></div> </div>1、用calc #father {width: 600px;height: 200px;background-color: black; }#son {width: calc(100% - 200px);height: 100%;background-col…

【sdut2878】Circle

题目链接http://acm.sdut.edu.cn/onlinejudge2/index.php/Home/Index/problemdetail/pid/2878.html 题意 n个结点编号为0到n-1组成一个环。如果当前在结点x&#xff0c;那么它等概率的走向 (x1)mod n,(x-1) 问从0到x的期望步数是多少 分析 高斯消元解决带环概率DP f[i]表示当前…

ES新提案:双问号操作符

为了保证的可读性&#xff0c;本文采用意译而非直译。 本文主要讲Gabriel Isenberg撰写的ES提案“Nullish coalescing for JavaScript”。它提出?? 替换||的运算符,并提供默认值。这里先把这相提案叫作双问号操作符&#xff0c;如果你有好的叫法&#xff0c;欢迎留言讨论。 …

1.2引入jQuery的方法

引入jQuery 网页中添加jQuery 从jQuery.com下载jQuery库从CDN中载入jQuery&#xff0c;如从Google中加载jQUery 百度和新浪的服务器存有jQuery 例如&#xff1a;http://libs.baidu.com/jquery/1.10.2/jquery.min.js谷歌和微软的服务器存有jQuery 例如&#xff1a;http://a…