Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/426.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript then()真的在所有情况下都返回承诺吗?_Javascript_Promise - Fatal编程技术网

Javascript then()真的在所有情况下都返回承诺吗?

Javascript then()真的在所有情况下都返回承诺吗?,javascript,promise,Javascript,Promise,我知道then()promise方法本身总是返回一个promise。作为一个新手,我仍然习惯于承诺,所以我只是回顾了一些例子并进行了修补。下面的示例显示then方法的返回值是一个对象 const foo=true; const myPromise=新承诺((解决、拒绝)=>{ 设置超时(()=>{ 如果(foo){ 决定(“这样做”); }否则{ 拒绝(错误(“那样做”); } }, 1500) }) const bar=myPromise.then(value=>value); console

我知道
then()
promise方法本身总是返回一个promise。作为一个新手,我仍然习惯于承诺,所以我只是回顾了一些例子并进行了修补。下面的示例显示
then
方法的返回值是一个对象

const foo=true;
const myPromise=新承诺((解决、拒绝)=>{
设置超时(()=>{
如果(foo){
决定(“这样做”);
}否则{
拒绝(错误(“那样做”);
}
}, 1500)
})
const bar=myPromise.then(value=>value);
console.log(条形图的类型);//对象
这是否等同于回报承诺?或者我是否需要明确告诉
然后
返回这样的承诺(伪代码,我知道不正确):

。然后(值=>{
//做点什么
回报新的承诺;
})
我想确定我有这个。非常感谢您的帮助。

是的,
then()
方法返回一个承诺。它最多包含两个参数:用于承诺成功和失败案例的回调函数

承诺是一个对象,承诺的类型将是一个
对象
。你不需要明确地回报一个承诺

您可以阅读有关
承诺的更多信息
然后()
始终返回承诺。但是,伪代码是不正确的。函数
然后
接受两个参数:

p.then(onFulfilled[, onRejected]);

p.then(value => {
  // fulfillment
}, reason => {
  // rejection
});
Promise
构造函数完全相同<编码>然后
从另一个承诺中创建一个承诺。我们经常忽略
onRejected
参数,因为我们使用
catch
处理拒绝案例

这里有一篇有趣的文章:


然后,
then
doc:

您忘记了
.catch(函数(错误){..
是,
则总是为相应回调的结果返回一个新的承诺。如果该回调返回一个承诺,也将等待一个,但如果回调返回一个普通值(甚至
未定义的
)然后承诺就可以实现了。使用
await
->
const bar=await myPromise.then(value=>value);console.log(typeof bar);//string
typeof
不会告诉你某个东西是否是承诺。它会为几乎任何类型的对象返回
“object”
,包括承诺。请参阅: