首页 > 解决方案 > 如何获取带有等待的非阻塞函数的返回值

问题描述

可以说我有以下功能:

async 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')



}); 

但我收到一堆语法错误..关于如何实现它的任何想法?

标签: javascriptcallback

解决方案


当你使用一个async函数时,你是在使用Promise接口,它暴露了一个.then()方法。您可以将回调传递给此方法,当函数返回值时,将自动为您调用回调commentMediaId

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

最后,您不需要在函数中接收callback参数commentMediaId。您可以省略callback并直接返回值。这就是 async/await “语法糖”的全部想法,它让它感觉更像是一个不需要回调的常规函数​​。

例如以下:

return callback('success');

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

return 'success';

推荐阅读