繁体   English   中英

io.emit不发送诺言的回报

[英]io.emit not sending return from promise

io.emit('runPython', FutureValue().then(function(value) {
  console.log(value); //returns 15692
  return value;  // socket sends: 42["runPython",{}]
}));

如上所述,我正在尝试在io.emit上发送15692,但是即使我可以在控制台中看到该值,但承诺的函数也不会返回该值。

这是FutureValue():

function FutureValue(){
var rate = 0.05;
var nper = 10;
var pmt = 100;
var pv = 100;
var result;

return new Promise(function(resolve, reject) {
  new PythonShell('future_value.py', jsc(options, {
    args: [rate, nper, pmt, pv]
  }))
  .on('message', resolve);
  })
}

当前,您将promise作为第二个参数传递给emit方法,而不是解析值。

相反,当诺言解决时,调用emit

FutureValue().then(function(value) {
  console.log(value); //returns 15692
  io.emit('runPython', value);
});

或更短(没有console.log ):

FutureValue().then(io.emit.bind(io, 'runPython'));
io.emit('runPython', FutureValue().then(function(value) {
  console.log(value); //returns 15692
  return value;  // socket sends: 42["runPython",{}]
}));

您的发出不是发送value ,而是发送承诺!

value仅在then()的回调函数中可用,在promise成功完成后将异步调用该值。 到发出事件时,您手中只有一个Promise ,还没有结果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM