javascript - 如何获取带有等待的非阻塞函数的返回值
问题描述
可以说我有以下功能:
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')
});
但我收到一堆语法错误..关于如何实现它的任何想法?
解决方案
当你使用一个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';
推荐阅读
- amazon-web-services - 使用詹金斯在 jboss 上部署战争
- python - 同一种子的 Python 随机数生成不同
- css - CSS网格如何使用自动适应设置的列数
- amazon-web-services - 如何在 EC2 上的 docker 内使用 AWS 凭证运行命令?
- android - 24*7 运行 Android 服务
- reactjs - 有状态功能组件重新渲染
- python-3.x - 如何在 python 中使用 opencv 读取数据矩阵代码?
- excel - 在不使用宏或 VBA 的情况下获取作为活动单元格地址的单元格的值
- amazon-dynamodb - DynamoDB 中包含用户和用户组的权限模型
- angular - Angular spyOn ngrx/store 在 Promise 范围内