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


菜鸟教程之promise

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

Promise.resolve 方法,Promise.reject 方法

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

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

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

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

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,会被传递给实例的回调函数。

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方法的对象,比如下面这个对象。

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

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

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。

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

4.不带有任何参数

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

let p = Promise.resolve();
p.then(()=>{
	console.log("ok")
})
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 这个问题看起来像是一个JavaScript代码片段,它使用了Promise对象来返回res.data.status的状态值。当Promise对象成功执行时,它会将res.data.status的值作为参数传递给resolve函数,并将该值作为Promise对象的返回值。如果发生错误,Promise对象将会拒绝,并将错误信息传递给catch函数进行处理。 ### 回答2: `Promise.resolve( res.data.status)`是一个Promise对象的方法,它将一个给定的参数转换为一个Promise对象,并且该对象的状态是resolved(已解决)。 其,`res.data.status`是一个表示状态的变量,它可能一个字符串、数字或者其他可转换为Promise对象的类型。 当调用`Promise.resolve( res.data.status)`时,返回的Promise对象会立即被解决,并且其解决值为`res.data.status`。 这意味着,当你使用`.then()`来处理这个Promise对象时,你可以获取到`res.data.status`的值,并且可以根据它进行后续的操作。例如: ```javascript Promise.resolve( res.data.status) .then(status => { // 在这里可以获取到res.data.status的值,并进行后续的操作 console.log(status); // 可以进行其他操作... }) .catch(error => { // 如果有错误发生,可以在这里进行捕捉和处理 console.error(error); }); ``` 总之,`Promise.resolve( res.data.status)`是将`res.data.status`转换为一个已解决的Promise对象,并且可以在后续的链式操作获取和处理该状态。 ### 回答3: Promise.resolve(res.data.status) 是一个包装了 res.data.status 值的 Promise 对象。 PromiseJavaScript 用于处理异步操作的一种机制。它可以帮助我们更方便地处理异步代码,避免回调地狱的发生。 Promise.resolve() 是一个静态方法,它返回一个已经解决(resolved)的 Promise 对象。一个已经解决的 Promise 对象表示一个成功完成的操作。 res.data.status 是一个从某个 API 获取的数据的状态值。 因此,Promise.resolve(res.data.status) 的作用是将 res.data.status 的值封装成一个已经解决的 Promise 对象。这样我们就可以使用 Promise 对象提供的方法,如 .then() 或 async/await 来处理这个异步操作的结果。 比如,我们可以通过以下方式使用这个 Promise 对象: Promise.resolve(res.data.status) .then((status) => { console.log(status); // 输出 res.data.status 的值 }) .catch((error) => { console.error(error); // 错误处理 }); 这样,在异步操作完成后,我们可以通过 .then() 方法来获取到 res.data.status 的值,并进行相应的处理。同时,我们也可以通过 .catch() 方法来捕获可能发生的错误,进行错误处理。 总结来说,Promise.resolve(res.data.status) 将一个值封装成一个 Promise 对象,方便我们处理异步操作的结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值