У меня есть приложение Node JS App Engine, которое использует запрос Promise Native для извлечения внешних URL-адресов.Сценарии App Engine, запущенные из облачных задач, должны иметь срок до 24 часов, но все мои задачи убиваются через 60 секунд.Я знаю, что другие фреймворки должны использовать встроенную библиотеку URLFetch, и это дает им автоматический 60-секундный срок выполнения задачи, но в документах ничего не говорится о задачах ядра приложения баз Node.JS.Эта задача извлекает json из внешнего URL-адреса, затем обрабатывает результаты и вставляет их в базу данных Firebase, что обычно происходит, когда задача завершается с ошибкой HTTP 504 Deadline Exceeded
app.post('/tasks/import', async (req, res) => {
const paramsObj = JSON.parse(Buffer.from(req.body, 'base64').toString('utf-8'));
const page = paramsObj.page * 1;
const storeID = paramsObj.storeid;
const pageSize = 50;
const config: StoreConfig = await getConfigById(storeID);
const options = {
uri: EXTERNAL_URL,
json: true,
resolveWithFullResponse: false,
qs: {
limit: pageSize,
page: page,
},
};
try {
const results = await rp.get(options);
if (results.products.length === 0) {
return res.status(200).end();
}
const prodLooper = idx => {
const product = results.products[idx];
product.store_id = storeID;
product.body_html = cleanProductBody(product.body_html);
getUnusedUPC(storeID)
.then(upcID => {
product.upc = upcID;
fsdb
.collection('products')
.add(product)
.then(() => {
idx++;
if (idx < results.products.length) {
prodLooper(idx);
} else {
return res.send('OK').end();
}
});
})
.catch(err => {
console.log(err.code, ':', page, ':', idx);
if (err.code === 10) {
setTimeout(() => {
prodLooper(idx);
}, 10);
}
});
};
prodLooper(0);
} catch (error) {
console.log('caught error:');
console.log(error.statusCode);
console.log(error.message);
return res.status(500).end();
}
});