запрос-обещание всегда возвращает ответ, а не возвращаемое значение - PullRequest
0 голосов
/ 25 июня 2018

Я хочу передать переменную, определенную в запросе-обещании, переменной вне области видимости.Я думал, что могу передать переменную с помощью оператора return внутри функции запроса, но функция запроса всегда возвращает HTTP-ответ (в данном случае в виде вывода HTML).

Мой код:

require('dotenv').config();
const jsdom = require("jsdom");
const { JSDOM } = jsdom;
var request = require('request-promise');

var get = function(arg1, arg2, arg3, arg4) {
    request(`https://www.googleapis.com/customsearch/v1?key=${process.env.API_KEY}&cx=${process.env.CX}&q=${arg1}`, async function(err, res, body) {
        var obj = JSON.parse(body);
        var url =  obj.items[0].formattedUrl;
        var part = await request(`${url}/staffel-${arg2}/episode-${arg3}`, function(err, res, body) {
            const dom = new JSDOM(`${body}`);
            var part = dom.window.document.getElementsByClassName(arg4)[0];
            return part;
        });
        console.log(part);
    });
};

Кроме того, я хотел бы передать вывод в функцию get, используя операторы return.Есть ли способ сделать это?

Редактировать: С моей точки зрения, это не дубликат этого вопроса .Запрос возвращает значение, но это не то значение, которое я хочу вернуть, как описано выше.

1 Ответ

0 голосов
/ 25 июня 2018

Полагаю, ваша реализация не идеальна для запроса-обещания с асинхронным ожиданием. не запускал код, но попробуй ниже 1.

async function asyncCall(arg1, arg2, arg3, arg4){
    try{
        var first = await request(`https://www.googleapis.com/customsearch/v1?key=${process.env.API_KEY}&cx=${process.env.CX}&q=${arg1}`);
        if(typeof first.body === "string"){
            first.body = JSON.parse(first.body);
        }
        var obj = first.body;
        var url =  obj.items[0].formattedUrl;
        var part = await request(`${url}/staffel-${arg2}/episode-${arg3}`)
        if(typeof part.body === "string"){
            part.body = JSON.parse(part.body);
        }
        var dom = new JSDOM(`${JSON.parse(part.body)}`)
        return dom.window.document.getElementsByClassName(arg4)[0];
    }
    catch(e){
        console.log(e);
    }
}
...