使用箭头功能使此代码正常工作:
f0(value)
.then(val1 => f1(val1))
.then(val2 => f2(val2))
.catch(error => result.textContent = error)
.then(() => final.textContent = "Done");
我正在尝试使用常规功能对其进行版本控制,如下所示:
f0(value)
.then(function(val1){ f1(val1) })
.then(function(val2){ f2(val2) })
.catch(function(error){ result.textContent = error })
.then(function(){ final.textContent = "Done" });
该代码似乎忽略了任何拒绝的Promise,因此如果第一个.then()
被拒绝,它将继续调用第二个,依此类推。
在上面的ES6示例中不会发生这种情况。
我在语法上犯了错误吗?
答案 0 :(得分:2)
由于在ES6代码版本中使用了简写的粗箭头功能,因此无需指定return
语句,因为在这种情况下隐式隐含了该语句。
因此,在将其转换为使用常规函数时,您这次必须指定return
语句。
f0(value)
.then(function(val1){ return f1(val1) })
.then(function(val2){ return f2(val2) })
.catch(function(error){ return result.textContent = error })
.then(function(){ return final.textContent = "Done" });
答案 1 :(得分:1)
您错过了return
语句。
等效于:
val1 => f1(val1)
是:
function(val1){ return f1(val1) }
答案 2 :(得分:-3)
我认为您应该有一个then()和一个catch()方法来实现信号承诺。如果需要多个处理程序,请尝试将它们包装在一个函数中。