假设我具有以下功能:
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')
});
但是我遇到了一堆语法错误。如何实现它的任何想法?
asyn
应该为async
,并且在函数commentMediaId(...otherArgs, callback(){}
的最后一个参数中也有一个括号,而不是commentMediaId(...otherArgs, callback){}
async
功能时,正在使用Promise
接口,该接口公开了.then()
方法。您可以将回调传递给此方法,当commentMediaId
函数返回值时,该回调将自动为您调用:commentMediaId(object, 'someid', 'some string')
.then(function (result) {
console.log(result);
})
;
最后,您不需要在函数中输入callback
参数。您可以忽略它,而直接直接返回值。这就是异步/等待“语法糖”的整体思想,它使它看起来更像是常规函数,无需回调。例如以下:
return callback('success');
...应更改为以下内容:
return 'success';