首页 > 解决方案 > 在 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) 解决了这个问题。

标签: javascriptasynchronousaws-sdknode-red

解决方案


推荐阅读