回调后如何返回值到主函数

时间:2018-08-02 20:03:54

标签: javascript node.js async-await

我正在尝试编写一个函数,该函数从Node上的ProductHunt API返回一系列 Vote 对象。 我可以访问这些对象,但是我不知道如何通过函数返回它们

var productHuntAPI = require('producthunt');
var productHunt = new productHuntAPI({
client_id: '123' ,// your client_id
client_secret: '123',// your client_secret
grant_type: 'client_credentials'
});

async function votesFromPage(product_id,pagenum){
    var votes;
    var params = {
    post_id:product_id,
    page:pagenum
    };

    productHunt.votes.index(params, async function (err,res) {
            var jsonres=  JSON.parse(res.body)
            votes = jsonres.votes
            console.log(votes)
    })
    return votes
}




async function main() {
    var a = await votesFromPage('115640',1)
    console.log('a is '+a)
    }
main();

日志:
a未定义
[投票对象数组]

我希望var a包含投票对象,以便我可以使用

1 个答案:

答案 0 :(得分:1)

然后您需要await一个承诺。这样它才能获得投票并返回。

async function votesFromPage(product_id,pagenum){

    var params = {
        post_id:product_id,
        page:pagenum
    };

    var votes = await new Promise((resolve, reject)=> {
        productHunt.votes.index(params, async function (err,res) {
            err && reject(err);
            var jsonres=  JSON.parse(res.body)
            resolve(jsonres.votes)
        });
    });
    return votes
}

编辑: 或者我们现在utils.promisify做同样的事情

const productHuntPromise = utils.promisify(productHunt.votes.index);
var votes = await productHuntPromise(params)