Reputation: 31
In this code below I have a client which creates multiples tasks inside a map loop. However, this process doesn't complete and returns the follow network error:
Error: request to https://cloudtasks.googleapis.com/$rpc/google.cloud.tasks.v2.CloudTasks/CreateTask failed, reason: Client network socket disconnected before secure TLS connection was established
How can I fix this?
const { CloudTasksClient } = require('@google-cloud/tasks');
exports.sendTask = (req, res) => {
const data = req.body.data;
const client = new CloudTasksClient({ fallback: true });
const parent = client.queuePath(process.env.PROJECT, process.env.LOCATION, process.env.QUEUE);
const url = process.env.URL;
let counter = 0;
data.map(payload => {
counter += 1;
console.log('preparando task ', counter);
const task = {
httpRequest: {
httpMethod: 'POST',
url,
oidcToken: {
serviceAccountEmail: process.env.SERVICE_ACCOUNT,
},
headers: {
'Content-Type': 'application/json',
},
body: Buffer.from(payload).toString('base64')
}
};
client.createTask({parent, task});
console.log('Task gerada.');
});
res.status(200).send();
}
Upvotes: 3
Views: 674
Reputation: 837
According to documentation - client.createTask
is async function, means, your code should wait for it's result somehow. Having a loop here, I guess, you want call all of them asynchronously, not one by one, and wait for result of all of them. I suggest you to use Promise.all
const { CloudTasksClient } = require('@google-cloud/tasks');
exports.sendTask = async (req, res) => {
const data = req.body.data;
const client = new CloudTasksClient({ fallback: true });
const parent = client.queuePath(process.env.PROJECT, process.env.LOCATION, process.env.QUEUE);
const url = process.env.URL;
let counter = 0;
await Promise.all(data.map(payload => {
counter += 1;
console.log('preparando task ', counter);
const task = {
httpRequest: {
httpMethod: 'POST',
url,
oidcToken: {
serviceAccountEmail: process.env.SERVICE_ACCOUNT,
},
headers: {
'Content-Type': 'application/json',
},
body: Buffer.from(payload).toString('base64')
}
};
console.log('Task gerada.');
return client.createTask({parent, task});
}));
console.log('All task were generated.');
res.status(200).send();
}
Upvotes: 0