【发布时间】:2018-12-22 23:29:12
【问题描述】:
我正在尝试使用 postMessage() 将对象传递回渲染器。
代码解析良好,并在一系列提取后创建我的对象。
loadMainTbls()
.then(retVal => buildMainTbl(retVal))
.then(dat => reduceMainTbl(dat))
.then(res => postMessage(res))
如果我 console.log(res) 正确的数组被注销。我意识到 res 是一个承诺。
.then(res => postMessage(new Promise(function(resolve) {
resolve(res)
})))
当我尝试解析 res 时,它总是作为长度为零的数组返回。在某些尝试中,我收到 # 无法克隆错误。
我试图想象我可能做错了什么但没有成功。有人可以帮助我获取 promisevalue 并将 Message 发布回渲染器。
【问题讨论】:
-
注意
.then(res => res)是完全多余的,你可以完全删除它,如果其他函数只接受一个参数,你可以简单地传递函数名而不是传递匿名箭头函数(会使你的代码更干净) -
不完全确定问题出在哪里,如果您希望该大承诺链的消费者能够访问结果,您可以
postMessage(res); return res;吗? -
您的第一点已被采纳。接下来,我不明白为什么可以注销“长”承诺链,但我不能 postMessage() 它。
-
在脚本的第一个块中,
res不能是一个承诺,因为你不能用一个承诺来履行承诺。请澄清您所说的“我意识到 res 是一个承诺”是什么意思。在第二个脚本块中,您不能postMessage承诺,因为它们不是 serialisable objects。 -
我的意思是 res 是承诺链中的最后一个环节。该链的结果是一个数组。如果 res 不是可序列化的对象,我不能在发布消息中使用它。如何将 res 更改为可序列化/可克隆的对象?我将查看这篇文章 - 你是说我无法将数据转换为可以与 postMessage 一起传递的表单?
标签: javascript node.js electron postmessage