javascript 绑定(bind)函数不绑定(bind)值( Electron 远程回调)

标签 javascript electron

概述

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

问题

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

有什么建议吗?

enter image description here

最佳答案

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

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

结果如下所示,您可以看到 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)
}

关于javascript 绑定(bind)函数不绑定(bind)值( Electron 远程回调),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43919019/

相关文章:

javascript - 如何使用 Javascript 计算通过 ajax 返回的 <li> 的数量?

javascript - 如何使用 jQuery 和 Bootstrap 在文档中创建多个模式?

javascript - 外部 promise 不会触发 Angular2 更改检测(更新 : they do)

reactjs - Cookies 模块在 Electron 应用程序中不起作用

vue.js - 我有Electron Project,我想在其中使用vueJS

javascript - d3.json()回调中的代码未执行

javascript - 从数组中删除元素并更新表

javascript - 使具有圆边响应的 svg 路径

node.js - Electron 应用程序启动后立即退出

javascript - 窗口右侧的小缝隙(窗口过大)