如何获得等待它的非阻塞函数的返回值

问题描述 投票:1回答:2

假设我具有以下功能:

asyn function commentMediaId(ig, media_id, commentContent,commentIfAlreadyCommented = false ,extraInfo = new Object(), callback(){

    try {
        let alreadyExists = ig.db.get('comments').find({media_id: media_id}).value();
        alreadyExists == undefined ? false : true;
        if(alreadyExists && !commentIfAlreadyCommented) {
            console.log('Already commented'.yellow);
            return "already_commented";
        }

        if(commentIfAlreadyCommented || !alreadyExists){
            await ig.media.comment({
                module_name: 'profile',
                mediaId: media_id,
                text: commentContent,
            });


            return callback('success');
        }
    } catch (e) {
        return callback('not success');
    }

}

然后,我正在调用以下函数(我不想在这里使用await,因为它将阻塞):

commentMediaId(object, 'someid', 'some string'); 

我如何看到commentMediaId上的回调,这样当它返回时,我获得成功或不成功的值?

我基本上想做如下

commentMediaId(object, 'someid', 'some string', function(result) {
   if (result == 'success')



}); 

但是我遇到了一堆语法错误。如何实现它的任何想法?

javascript callback
2个回答
0
投票
似乎您有一些错别字-asyn应该为async,并且在函数commentMediaId(...otherArgs, callback(){}的最后一个参数中也有一个括号,而不是commentMediaId(...otherArgs, callback){}

0
投票
[使用async功能时,正在使用Promise接口,该接口公开了.then()方法。您可以将回调传递给此方法,当commentMediaId函数返回值时,该回调将自动为您调用:

commentMediaId(object, 'someid', 'some string') .then(function (result) { console.log(result); }) ;

最后,您不需要在函数中输入callback参数。您可以忽略它,而直接直接返回值。这就是异步/等待“语法糖”的整体思想,它使它看起来更像是常规函数,无需回调。

例如以下:

return callback('success');

...应更改为以下内容:

return 'success';

© www.soinside.com 2019 - 2024. All rights reserved.