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

如上回報,我想對io.emit發送15692,但承諾的功能不回來,即使我可以看到在控制檯中值的值。io.emit不發送從承諾

這裏是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
io.emit('runPython', FutureValue().then(function(value) { 
    console.log(value); //returns 15692 
    return value; // socket sends: 42["runPython",{}] 
})); 

你EMIT沒有發出value,它發送的承諾!

value只是then()回調函數,這將是異步調用後的承諾,成功完成內部可用。當你發出這個事件時,你只有一個Promise,並且沒有結果。

1

您當前將承諾作爲第二個參數傳遞給emit方法,而不是解決的值。

相反,調用emit時承諾解決:

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

或較短(不console.log):

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

的偉大工程,我學到新的東西!非常感謝! – Peder

+0

不要忘記[將答案標記爲已接受](http://stackoverflow.com/help/someone-answers)。 – trincot