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);
})
}
答案 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
而且还没有结果。