2017-02-25 87 views
0

使用node.js并试图让节点运行python-shell,计算一个值,然后返回computePython()的答案作为关键结果的对象。应该返回到另一个函数的函数内的回调

如何获取消息以返回结果:FutureValue()? 的console.log(消息)。在(“信息”中的作品..

function computePython(){ 
    return { 
    result: FutureValue() // I want message from FutureValue() to show up here 
    }; 
} 

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

    new PythonShell('future_value.py', jsc(options, { 
    args: [rate, nper, pmt, pv] 
    })) 
    .on('message', function (message) { 
     console.log(message); //works 
     return message; 
    }); 
    } 
+0

我想你应该使用[Promise](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Promise)。 –

回答

1

你不能因为这个处理是异步的,你可以使用Promise让你的代码更清晰,可重复使用:

function computePython(){ 
    getFutureValue().then(function(value) { 
     // do what you want with value here 
    }); 
} 

function getFutureValue(){ 
    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

依然在挣扎,console.log(value)的作品,但返回值以{“result”; {}}结束了任何想法?function computePython(){ return { resul t:FutureValue()。then(function(value){console.log(value); //作品 返回值; //返回空 }) }; } – Peder

+0

你想说你收到来自PythonShell执行的消息,但它是空的=> {{result:{}}'? – Freez

+0

是的,所以我确实喜欢你说的,并从PythonShell获取消息给computerPython。当我使用console.log(value)运行computePython并在//中按值返回值时,console.log显示值,但返回值返回undefined。 – Peder