Promise的.then()不接受分配给变量的函数吗?

时间:2018-07-27 06:17:17

标签: javascript promise

Promise.resolve(123)
    .then(String)
    .then((data)=>{
        console.log(data)
    })

在这里工作正常。

但是,如果我将函数分配给变量,然后传递给Promise's .then()。该函数只会忽略我的回调。

例如,

Promise.resolve(123)
    .then(String)
    .then(myFunc)

var myFunc = (data)=>{
    console.log(data)
}

它不打印任何内容。唯一的区别是,该函数已分配给变量,然后传递给.then(),而不是直接传递。但据我所知,应该没有区别。为什么会这样?

(顺便说一句,我也尝试了ES6之前的传统函数语法,但没有区别)

1 个答案:

答案 0 :(得分:6)

如注释中所示,使用分配给变量的函数不是问题。使用尚无值的变量是一个问题。

  

唯一的区别是将函数分配给变量,然后传递给.then(),而不是直接传递。

不,实际上,它已传递给.then() 然后分配给变量的。有很大的不同。

在此示例中,myFunc在使用时为undefined

Promise.resolve(123)
  .then(String)
  .then(myFunc)

console.log('myFunc is', myFunc);

var myFunc = (data) => {
  console.log(data)
}

解决方案:使用之前,请确保myFunc的值

var myFunc = (data) => {
  console.log(data)
}

Promise.resolve(123)
  .then(String)
  .then(myFunc)

console.log('myFunc is', myFunc);