gpt4 book ai didi

javascript - 等待回调nodejs

转载 作者:行者123 更新时间:2023-12-03 09:08:36 25 4
gpt4 key购买 nike

这是我的代码:

for (var i = 0; i < items.length; i++) {
doSomeWork('Company","{message : "message"}');
}

doSomeWork = function (companyIdentifier,item) {
var serialisedMessage = new serialisedMessageWithMetadata(item);

//I want this to block until the callback inside send is fired.
send(companyIdentifier, serialisedMessage.getJSON());
}

send = function (queueId, msg) {
var sqsQueueUrl = this.createQueueUrl(queueId);

var sqsParams = {
MessageBody: JSON.stringify(msg),
QueueUrl: sqsQueueUrl
};

sqs.sendMessage(sqsParams, function (err, data) {
if (err) {
console.log('ERR', err);
}
else {
console.log(data);
}
});
}

我希望我的 for 循环等待 sendMessage 中的回调被触发。浏览了 Google 上的一些文章,我开始认为 Promises 就是我所需要的,但这似乎是简单地阻止函数的非常复杂的方法(而且我也无法让示例工作!)

我怀疑这是我缺少的一些基本内容,并且希望得到像“等待”这样的东西。

如有任何帮助,我们将不胜感激。

最佳答案

您无法阻止 Javascript 等待异步操作完成。事实并非如此。如果您想序列化消息,以便发送一条消息,收到成功的响应,然后发送下一条消息,那么您将必须专门为顺序异步操作编写代码。有多种方法。

以下是解决此问题的一些示例:

Making async javascript task in a loop

How to synchronize a sequence of promises?

Questions from the synchronous node.js

这里有一个想法,如何重组代码以使其按顺序工作:

function doAllWork(items, companyIdentifier) {
var cntr = 0;

function send(queueId, msg, done) {
var sqsQueueUrl = this.createQueueUrl(queueId);

var sqsParams = {
MessageBody: JSON.stringify(msg),
QueueUrl: sqsQueueUrl
};

sqs.sendMessage(sqsParams, function (err, data) {
if (err) {
console.log('ERR', err);
}
else {
console.log(data);
}
done(err, data);
});
}

function doSomeWork() {
// if still more do do, then do the next one
if (cntr < items.length) {
var serialisedMessage = new serialisedMessageWithMetadata(items[cntr++]);

//I want this to block until the callback inside send is fired.
send(companyIdentifier, serialisedMessage.getJSON(), function(err, data) {
if (!err) {
// do next iteration
doSomeWork();
}
});
}
}
}

doAllWork(items, 'Company","{message : "message"}');

关于javascript - 等待回调nodejs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32144841/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com