javascript - 在 node-red/vanilla js 函数中模拟异步等待
问题描述
我正在使用节点红色流,并且在内部我有一个节点函数,它执行以下操作:
s3.getObject(params, function(err,data) {
if (!err && data && data.Body) {
msg.s3aka = data.Body.toString()
}
});
while (true) {
if (msg.s3aka)
break;
let start = new Date().getTime();
while (true) { // delay 100ms
if ((new Date().getTime() - start) > 100){
break;
}
}
}
return msg;
所以我等待结果(msg.s3aka)被设置为返回味精。这看起来很难看,我不能在节点函数中使用 async/await(不支持 ES 7)。如果我使用 Promise,最后一行(返回 msg)将在设置 msg.s3aka 之前执行。那么有没有更好的方法来使用 vanilla javascript 来做到这一点?
编辑:如何从异步调用返回响应不能解决这个问题?因为它特定于节点红色。我尝试了各种方法,包括使用日期、异步等待、承诺。我通过在回调中使用 node.send(msg) 解决了这个问题。
解决方案
推荐阅读
- html - Bootstrap 导航栏上的颜色不会改变
- c# - 如何将有序的多行文本拆分为数组c#
- python - 我怎样才能杀死我用python启动的进程
- java - 反序列化具有一个元素的列表,如果列表大小为 1,则直接作为元素本身(Json 格式)
- excel - 将所有值从一张表复制并粘贴到另一张表
- git - 如何修复在非主分支上提交的修改子模块引用?
- apache-spark - 为什么 SparkContext 会创建大量与 Hive Metastore 的连接并扫描所有数据库?
- python - 如何:在 Windows 上为 Mac OS 创建 Python 应用程序
- python - 我无法在 Windows 上为 anaconda jupyter notebook 安装 pandas-datareader
- python - 当列名中有 `.` 时,Pandas 查询或评估