blob.doesBlobExist не возвращает значения

#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 библиотеку и поместить весь цикл в обещание.