如何在回调后将值返回给main函数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在回调后将值返回给main函数相关的知识,希望对你有一定的参考价值。

我正在尝试编写一个函数,该函数从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包含投票对象,所以我可以使用它

答案

你需要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)

以上是关于如何在回调后将值返回给main函数的主要内容,如果未能解决你的问题,请参考以下文章

什么是回调函数麻烦告诉我

如何将值从其他活动传递给 viewpager 片段?

从使用 wkwebview 返回值的 javascript 调用 swift 函数

js 如何创建带返回值的函数

如何将值从片段/活动传递到 xml?

关闭所有导航 ViewController 后将值传递给主 ViewController 并执行操作