0

我想将在 request-promise 中定义的变量传递给超出范围的变量。我想我可以在请求函数中使用 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);
    });
};

此外,我想使用 return 语句将输出传递给 get 函数。有什么办法吗?

编辑:从我的角度来看,这不是这个问题的重复。该请求返回一个值,但它不是我想要返回的值,如上所述。

4

1 回答 1

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);
    }
}
于 2018-06-25T16:04:25.947 回答