Javascript 为什么';在React Redux中设置异步操作创建者的超时工作?

Javascript 为什么';在React Redux中设置异步操作创建者的超时工作?,javascript,reactjs,settimeout,redux,react-redux,Javascript,Reactjs,Settimeout,Redux,React Redux,我正在学习react redux,但不了解这一部分: var asyncSayActionCreator_0 = function (message) { setTimeout(function () { return { type: 'SAY', message } }, 2000) } 但是我们的动作创造者不会返回动作,它会 返回“未定义”。所以这不是我们正在寻找的解决方案 因为 为什么这行不通

我正在学习react redux,但不了解这一部分:

var asyncSayActionCreator_0 = function (message) {
    setTimeout(function () {
        return {
            type: 'SAY',
            message
        }
    }, 2000)
}

但是我们的动作创造者不会返回动作,它会 返回“未定义”。所以这不是我们正在寻找的解决方案 因为


为什么这行不通?我认为setTimeout会返回超时的ID,而不是未定义的ID。

代码无法工作有两个原因:

  • 因为该函数没有返回函数(看起来像输入错误)

  • 即使它返回一个
    编号
    ,它也不是一个操作(一个对象),您还需要一个对“dispatch”函数的引用才能将操作发送到存储。在本教程的后面部分,他们将展示如何调用该操作:(redux希望操作始终是一个对象,如果它是一个函数,redux thunk将执行该操作)

  • 通过使用thunk中间件,您可以生成所谓的“效果”。这种影响不在应用程序的状态之内。在函数式编程中,这被称为“不纯”函数


    顺便说一句,那个教程看起来不太好。我推荐一些更像本教程的内容:

    代码无法工作有两个原因:

  • 因为该函数没有返回函数(看起来像输入错误)

  • 即使它返回一个
    编号
    ,它也不是一个操作(一个对象),您还需要一个对“dispatch”函数的引用才能将操作发送到存储。在本教程的后面部分,他们将展示如何调用该操作:(redux希望操作始终是一个对象,如果它是一个函数,redux thunk将执行该操作)

  • 通过使用thunk中间件,您可以生成所谓的“效果”。这种影响不在应用程序的状态之内。在函数式编程中,这被称为“不纯”函数


    顺便说一句,那个教程看起来不太好。我推荐一些更像本教程的内容:

    如果您执行了
    返回setTimeout,则会出现这种情况(…
    。如果命中no
    return
    语句,函数将返回
    undefined
    。因此,如果我使用
    return
    ,整个过程都会工作?不,它不会。它将返回一个ID,但您永远不会得到
    setTimeout
    回调的返回值。这意味着,您永远无法访问
    {type:'SAY',message
    对象。深渊。没有任何东西可以引用它。您可以使用用于异步操作。如果您执行
    返回setTimeout,则会使用(…
    。如果命中no
    return
    语句,函数将返回
    undefined
    。因此,如果我使用
    return
    ,整个过程都会工作?不,它不会。它将返回一个ID,但您永远不会得到
    setTimeout
    回调的返回值。这意味着,您永远无法访问
    {type:'SAY',message
    对象。深渊。没有任何东西可以引用它。你可以使用异步操作。这不是打字错误,他正在阅读的链接明确说明了为什么这不起作用。是的,但看起来并不是一个很好的说教或解释为什么它不起作用(参见我的观点#2)。“但是我们的操作创建者不会返回操作,它会返回“未定义”这是完全正确的。解释得很好。这不是打字错误,他正在阅读的链接明确说明了为什么这不起作用。是的,但看起来并不是一个很好的说教或解释为什么它不起作用(参见我的观点2)。“但是我们的动作创建者不会返回动作,它会返回“未定义”那完全正确,解释得很好。