then() 真的在所有情况下都返回一个承诺吗? [复制]
Posted
技术标签:
【中文标题】then() 真的在所有情况下都返回一个承诺吗? [复制]【英文标题】:Does then() really return a promise in all cases? [duplicate] 【发布时间】:2020-05-12 05:33:04 【问题描述】:我的理解是then()
promise 方法本身总是返回一个promise。 Promise 是我仍然习惯于成为一个新手的东西,所以我刚刚回顾了一些例子并进行了修补。以下示例显示then
方法的返回值是一个对象。
const foo = true;
const myPromise = new Promise((resolve, reject) =>
setTimeout(() =>
if (foo)
resolve('Do this');
else
reject(Error("Do that"));
, 1500)
)
const bar = myPromise.then(value => value);
console.log(typeof bar); // object
这和返回一个承诺一样吗?还是我需要明确告诉then
像这样返回一个承诺(伪代码,我知道不正确):
.then(value =>
// do something
return new Promise;
)
我想确定我有这个。非常感谢您的帮助。
【问题讨论】:
你忘了.catch(function(error) ....
是的,then
always 为相应回调的结果返回一个新的承诺。 如果该回调返回一个也将被等待的承诺,但如果回调返回一个普通值(甚至undefined
),那么该承诺将简单地实现。
使用await
-> const bar = await myPromise.then(value => value); console.log(typeof bar); // string
typeof
不会告诉你某事是否是一个承诺。它为几乎任何类型的对象返回"object"
,包括promise。见:developer.mozilla.org/en-US/docs/Web/javascript/Reference/…
【参考方案1】:
是的then()
总是返回一个承诺。但是,伪代码不正确。函数then
有两个参数:
p.then(onFulfilled[, onRejected]);
p.then(value =>
// fulfillment
, reason =>
// rejection
);
与Promise
构造函数完全一样。 Then
从另一个人那里创建一个承诺。我们经常省略onRejected
参数,因为我们使用catch
处理拒绝案例。
这里有一篇有趣的文章:https://medium.com/@kevinyckim33/what-are-promises-in-javascript-f1a5fc5b34bf
还有then
文档:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/then
【讨论】:
【参考方案2】:是的,then()
方法返回一个 Promise。它最多需要两个参数:Promise 成功和失败情况的回调函数。
promise 是一个对象,promise 的 typeof 将是一个object
。你不需要明确地返回一个承诺。
您可以阅读有关promises
here 的更多信息
【讨论】:
以上是关于then() 真的在所有情况下都返回一个承诺吗? [复制]的主要内容,如果未能解决你的问题,请参考以下文章