javascript绑定函数不绑定值(电子远程回调)

时间:2017-05-11 14:57:04

标签: javascript electron

概述

在下面的剪辑中,我得到一个名为defaultPath的pickFolder()参数。 pickFolder处于电子渲染过程中。它正在使用回调对utils.openFolder(在主进程中)进行远程调用(我已尝试过箭头回调以及函数回调)。

问题

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

有什么建议吗?

enter image description here

1 个答案:

答案 0 :(得分:1)

这是我发现的。电子为远程调用打开对话框所做的回调是绑定"这个"到全球的国家。

,当调用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)
}