Как я могу получить результат асинхронного метода метеора в моем клиенте - PullRequest
0 голосов
/ 10 июня 2019

Я должен выполнить скрипт 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)
    }
});

Вывод на стороне сервера: в имени для поиска не определено в моем запросе USERNAME

Вывод на стороне клиента:в клиенте 2 undefined в клиенте undefined

На сервере я печатаю хороший результат, но в клиенте он всегда "неопределен", независимо от того, что я делаю.Я просто хочу получить результат, который я могу распечатать в своем журнале консоли на стороне сервера и сохранить в переменной клиента

1 Ответ

0 голосов
/ 10 июня 2019

вы можете попробовать с Обещаниями, вот так:

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

Не могу проверить сейчас, но оно должно работать.

...