概述
在下面的片段中,我得到了一个名为 defaultPath 的 pickFolder() 参数。 pickFolder 处于 Electron 渲染过程中。它正在使用回调对 utils.openFolder (在主进程中)进行远程调用(我尝试过箭头回调以及函数回调)。
问题
在下面的示例中,我认为直接将 defaultPath 绑定(bind)到回调函数可以确保该值到达回调中。正如您在屏幕上看到的,本地上下文没有 defaultPath,但封闭的闭包有。但真正的问题(如控制台底部的红色文本所示,无法找到 defaultPath,即使我处于该断点)。
有什么建议吗?
最佳答案
这是我发现的。 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/