【问题标题】:javascript bound function not binding values (electron remote callback)javascript绑定函数不绑定值(电子远程回调)
【发布时间】:2017-05-15 23:26:02
【问题描述】:

概述

在下面的片段中,我得到了一个名为 defaultPath 的 pickFolder() 参数。 pickFolder 处于电子渲染过程中。它通过回调(我尝试过箭头回调和函数回调)远程调用 utils.openFolder(在主进程中)。

问题

在下面的示例中,我认为直接将 defaultPath 绑定到回调函数将确保值会在回调中到达。正如您在屏幕上看到的,本地上下文没有 defaultPath,但封闭的闭包有。但真正的问题(如控制台底部的红色文本所示,是无法找到 defaultPath,即使我在那个断点处)。

有什么建议吗?

【问题讨论】:

    标签: javascript electron


    【解决方案1】:

    这是我发现的。电子为远程调用打开对话框所做的回调将“this”绑定到全局状态。所以调用 remote.ShowOpenDialog() 时闭包中的所有上下文都将丢失。

    我能够捕获这些值的唯一方法是创建一个绑定函数并显式地为其赋予一个值,其中包含我希望在回调中可用的值。这意味着我不能使用箭头函数。

    结果如下所示,您可以看到 getState 现在来自 this,并且调试器确认已定义 this.defaultPath

    export const pickFolderFun = (defaultPath) => (dispatch, getState) => {
        let next = function(folders) {
            if (folders == undefined) return
            let fieldName = this.getState().UX.fieldName
            FormChanger(fieldName, folders[0])
        }.bind({defaultPath, dispatch, getState})
        dialog.showOpenDialog({
            title: 'Select Source Folder',
            defaultPath: defaultPath,
            properties: ["openDirectory"]
        }, next)
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-19
      • 2019-07-14
      • 2019-01-30
      • 2013-02-08
      • 1970-01-01
      • 1970-01-01
      • 2015-09-25
      • 2021-05-08
      相关资源
      最近更新 更多