Я разрабатываю облачные функции Google, которые вызывают задание потока данных и сохраняют в хранилище данных идентификатор задания потока данных. Эта часть работает идеально.
Моя проблема связана с другой облачной функцией (запускаемой через HTTP), которая считывает хранилище данных. Кажется, что облачная функция полностью асинхронна и завершается до того, как функция хранилища данных отправит некоторые данные.
Я взял пример хранилища данных из исходного API хранилища данных node-js https://github.com/googleapis/nodejs-datastore/blob/master/samples/tasks.js
Мой код:
exports.processJobs = (req, res) => {
jobList = "";
console.log(` INIT processJobs`);
const query = datastore.createQuery('Job').filter('finished', '=', false);
datastore
.runQuery(query)
.then(results => {
const jobs = results[0];
console.log('Jobs:');
jobs.forEach(job => {
const jobKey = job[datastore.KEY];
console.log(jobKey, job);
jobList = jobList + job.jobId;
});
})
.catch(err => {
console.error('ERROR:', err);
});
console.log(` END processJobs`);
res.status(200).send(":" + jobList);
}
Если я буду следить за журналом, сгенерированным моей функцией, я покажу, что функция завершается, и после этого она показывает задания в консоли:
2018-06-25 13:58:00.496 Function execution took 384 ms, finished with status code: 200
2018-06-25 13:59:14.774 Jobs:
2018-06-25 13:59:16.191 undefined { jobId: '2018-06-25_01_07_33-9128665201904101921',
beginTime: 2018-06-25T08:07:34.980Z,
finished: false,
status: 'JOB_STATE_RUNNING' }
ОБНОВЛЕНИЕ:
Решение перемещает ответ в часть «тогда» в соответствии с запросом в решении:
datastore
.runQuery(query)
.then(results => {
const jobs = results[0];
console.log('Jobs:');
jobs.forEach(job => {
const jobKey = job[datastore.KEY];
console.log(jobKey.id, job);
jobList = jobList + job.jobId;
});
res.status(200).send("Response:_" + jobList );
})