#node.js #azure-blob-storage
Вопрос:
Это может быть очень глупый вопрос, но мне нужно задать его; Я пытаюсь проверить, существует ли большой двоичный объект с помощью метода doesBlobExist из службы больших двоичных объектов.
мой код выглядит так:
var blobexists;
var containerNamesArray[.....,....,...,..]
for (var i = 0; i < containerNamesArray.length; i ) {
blobService.doesBlobExist(containerNamesArray[i], "path/something.json", function (error, result) {
if (!error) {
if (result.exists) {
blobexists= result.exists
console.log(blobexists) //this prints values
return(blobexists)
} else {
blobexists= result.exists
return(blobexists)
}
}
});
console.log(blobexists) //this returns null
}
Теперь, если я утешусь.войдите в систему, если(!ошибка), я получу значение результата, если я назначу result.exists для blob-объектов, верну значение и попытаюсь напечатать в for или за пределами for, в котором говорится, что blob-объекты имеют значение null.
Почему return не позволяет мне вернуть значение в глобальный var?
Ответ №1:
Почему return не позволяет мне вернуть значение в глобальный var?
Это связано с тем, что ваш blobService.doesBlobExist
метод выполняется асинхронно. Таким образом, отправляется запрос на проверку существования большого двоичного объекта, и ожидается ответ, однако ваш console.log(blobexists)
выполняется почти сразу после вызова doesBlobExist
метода.
Комментарии:
1. Привет, Гаурава, спасибо за ваш ответ, должен ли я использовать await где-нибудь в асинхронной функции? у вас есть какие-нибудь предложения?
2. Я бы на самом деле рекомендовал использовать
BlueBird Promise
библиотеку и поместить весь цикл в обещание.