如何在客户端中获得流星异步方法的结果

时间:2019-06-10 15:13:51

标签: node.js asynchronous meteor

我必须在服务器上执行python脚本。该脚本需要花一些时间来回答,但我需要客户端中脚本的响应。

/* here is the server side */

async function myRequest(options) {
    await PythonShell.run('converter.py', options, function (err, result) {
        if (err) throw err;
        console.log("in my request")
        console.log(result);
        return result;
    });
}

Meteor.methods({
    'findRealName': async function (id) {
        let options = {
            mode: 'text',
            pythonPath: '/usr/bin/python',
            pythonOptions: ['-u'], // get print results in real-time
            scriptPath: '/Users/eliott/Desktop/influFinder/client/',
            args: ['-i', id]
        };
        var result = await myRequest(options)
        console.log("in find name")
        console.log(result)
        return result
    }
});

/* here is the client side */

Template.search.events({
    'click #searchButton': function() {
        var id = 2220626204
        var result = Meteor.call('findRealName', [id], (error, res) => {
            console.log("in client")
            console.log(res)
        })
        console.log("in client 2")
        console.log(result)
    }
});

服务器端输出: 在查找名称中 未定义 在我的要求 使用者名称

客户端输出: 在客户2中 未定义 在客户中 未定义

在服务器中,我打印出良好的结果,但是在客户端中,无论我做什么,它始终是“未定义的”。 我只想得到可以在服务器端控制台日志中打印并将其存储在客户端变量中的结果

1 个答案:

答案 0 :(得分:0)

您可以尝试Promises,如下所示:

async function myRequest(options) {
    return new Promise(resolve => {
        PythonShell.run('converter.py', options, function (err, result) {
            if (err) throw err;
            console.log("in my request")
            console.log(result);
            resolve(result);
        });
    });
}

现在无法测试,但应该可以。