Я борюсь с циклами и обещаниями без использования async / await (это не было доступно в версии функций Azure, которые я запускал изначально, и я еще не перенес весь свой код в более новую версию). Я проверяю свою базу данныхна json-файлах, внутри каждого json-файла, который я проверяю, действительны ли URL-адреса, содержащиеся в 2 разных массивах.Затем, если срок действия URL истек, я хочу вставить этот идентификатор json в контейнер, чтобы иметь дело с последующим обновлением / update.
В настоящее время я пытаюсь проверить 2 отдельных массива на каждый json.
module.exports = function(context, req) {
getJsons(context, function(res) {
createContainer(context, res)
});
}
function getJsons(context, callback) {
context.log('start');
client.queryDocuments(
collectionUrlJsons,
`SELECT * FROM r`
).toArray((err, results) => {
if (err) {
context.log(err);
context.done();
} else {
context.log(results.length + " jsons");
// now I have all JSONs in an array
analyse(context, results, function(result) {
callback(result);
})
}
});
}
function analyse(context, results) {
var editArr = [];
for (i = 0; i < results.length; i++) {
var arr = [];
var loopPhotos = checkPhotos(context, results[i].photos);
var loopVideos = checkVideos(context, results[i].videos);
Promise.all([loopPhotos, checkVideos]).then(function(result) {
if (result[0].length > 0) {
context.log('photos expired')
arr.push('photo');
}
if (result[1].length > 0) {
context.log('videos expired')
arr.push('video');
}
});
if (arr.length > 0) {
editArr.push(results[i].id);
}
}
return Promise.all(editArr);
}
function checkPhotos(context, photos) {
var arr = [];
for (i = 0; i < photos.length; i++) {
var link = photos[i].latestUrl;
request(link, function(error, response, body) {
if (response.statusCode == 403) {
arr.push("photo: " + body);
}
});
}
return Promise.all(arr);
}
function checkVideos(context, videos) {
var arr = [];
context.log(videos)
for (i = 0; i < videos.length; i++) {
var link = videos[i].latestUrl;
request(link, function(error, response, body) {
if (response.statusCode == 403) {
arr.push("video: " + body);
}
});
}
return Promise.all(arr);
}
function createContainer(context, jsons) {
//code
}
Изменить ниже, чтобы отразить комментарии - чтобы поместить if (arr.length >0)
внутри Promise.all
в function analyse
:
module.exports = function(context, req) {
getJsons(context, function(res) {
createContainer(context, res)
});
}
function getJsons(context, callback) {
context.log('start');
client.queryDocuments(
collectionUrlJsons,
`SELECT * FROM r`
).toArray((err, results) => {
if (err) {
context.log(err);
context.done();
} else {
context.log(results.length + " jsons");
// now I have all JSONs in an array
analyse(context, results, function(result) {
callback(result);
})
}
});
}
function analyse(context, results) {
var editArr = [];
for (i = 0; i < results.length; i++) {
var arr = [];
var loopPhotos = checkPhotos(context, results[i].photos);
var loopVideos = checkVideos(context, results[i].videos);
Promise.all([loopPhotos, checkVideos]).then(function(result) {
if (result[0].length > 0) {
context.log('photos expired')
arr.push('photo');
}
if (result[1].length > 0) {
context.log('videos expired')
arr.push('video');
}
if (arr.length > 0) {
editArr.push(results[i].id);
}
});
}
return Promise.all(editArr);
}
function checkPhotos(context, photos) {
var arr = [];
for (i = 0; i < photos.length; i++) {
var link = photos[i].latestUrl;
request(link, function(error, response, body) {
if (response.statusCode == 403) {
arr.push("photo: " + body);
}
});
}
return Promise.all(arr);
}
function checkVideos(context, videos) {
var arr = [];
context.log(videos)
for (i = 0; i < videos.length; i++) {
var link = videos[i].latestUrl;
request(link, function(error, response, body) {
if (response.statusCode == 403) {
arr.push("video: " + body);
}
});
}
return Promise.all(arr);
}
function createContainer(context, jsons) {
//code
}