io.emit不发送承诺退货

时间:2017-02-25 13:36:38

标签: javascript node.js socket.io

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);
  })
}

2 个答案:

答案 0 :(得分:1)

您目前将承诺作为第二个参数传递给emit方法,而不是已解析的值。

相反,当promise解决时调用emit

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

或更短(没有console.log):

FutureValue().then(io.emit.bind(io, 'runPython'));

答案 1 :(得分:0)

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

你的发出没有发送value,它发送了承诺!

value仅在then()的回调函数中可用,在承诺成功完成后将被异步调用。当你发出事件时,你只有一个Promise而且还没有结果。