Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/453.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承诺从catch块返回字符串_Javascript_Es6 Promise - Fatal编程技术网

Javascript承诺从catch块返回字符串

Javascript承诺从catch块返回字符串,javascript,es6-promise,Javascript,Es6 Promise,我有以下Javascript承诺代码 功能作业(状态){ 返回新承诺(功能(解决、拒绝){ 如果(州){ 决心(“承诺成功”); }否则{ 拒绝(“承诺错误”); } }); } 让承诺=工作(真实); promise.then(函数(数据){ 控制台日志(数据); 返回作业(假); }).catch(函数(错误){ console.log(错误); 返回“捕获承诺错误”; }).then(功能(数据){ 控制台日志(数据); 返回作业(true); }).catch(函数(错误){ cons

我有以下Javascript承诺代码

功能作业(状态){
返回新承诺(功能(解决、拒绝){
如果(州){
决心(“承诺成功”);
}否则{
拒绝(“承诺错误”);
}
});
}
让承诺=工作(真实);
promise.then(函数(数据){
控制台日志(数据);
返回作业(假);
}).catch(函数(错误){
console.log(错误);
返回“捕获承诺错误”;
}).then(功能(数据){
控制台日志(数据);
返回作业(true);
}).catch(函数(错误){
console.log(错误);

});当在
.then
catch
块中时,如果解释器到达
return
语句,该块的承诺将解析(而不是拒绝)为返回的值

返回内容的类型并不重要。它可以是一个字符串,也可以是一个承诺(在这种情况下,承诺将在下一个
。然后执行
)之前展开),也可以是
未定义的

当然,如果您想在完成承诺链之前用价值做更多的事情,那么返回一些不是承诺的东西通常是个坏主意,但这不会导致错误——它只会导致更嘈杂(更难理解)的代码

//可能,但很奇怪:
承诺.决心(1)
。然后(num=>num+1)
。然后(num=>num*2)
.然后(console.log);
设置超时(()=>{
//更好:
承诺.决心(1)
。然后((num)=>{
常量newNum=(num+1)*2;
console.log(newNum);
});

}, 1000);嘿…快速提问…所以按照你的逻辑,即使在第一个承诺内。然后,我们有一个“返回作业(false)”…正如你所说的“如果解释器到达返回语句,该块的承诺将解析(而不是拒绝)为值”…但在这里,承诺并不是真正的“解析”,但是被拒绝了承诺的回报让事情变得更复杂了。如果你不回报承诺,它会解决的。但是,如果您返回一个承诺,它将要么按照承诺的解决值(如果承诺解决),要么以承诺的拒绝理由拒绝(如果承诺拒绝),要么永远挂起,如果承诺从未拒绝或解决。