使用ES5语法时忽略.then()方法

时间:2018-12-12 13:57:23

标签: function ecmascript-6 promise

使用箭头功能使此代码正常工作:

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示例中不会发生这种情况。

我在语法上犯了错误吗?

3 个答案:

答案 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()方法来实现信号承诺。如果需要多个处理程序,请尝试将它们包装在一个函数中。