乱序执行的 Javascript 代码,我可以修复它吗?

标签 javascript html

我正在尝试让这段代码正常工作,但它似乎出现了故障。我在控制台日志中注意到了这一点。

<script>
            var wrapper = document.getElementById("myHTMLWrapper");
            var myHTML = '';
            var databaseRef = firebase.database().ref('items/');
            databaseRef.once('value', function(snapshot)
            {
              snapshot.forEach(function(childSnapshot) 
              {
                var childKey = childSnapshot.key;
                var childData = childSnapshot.val();
                myHTML += '<div class="card">';
                myHTML += '<div class="card-body">';
                var urlimage = '';
                storageRef.child('images/'+ childData.id +'.jpg').getDownloadURL().then(function(url){
                    urlimage = url;
                    console.log(urlimage);
                });
                console.log('url outside of function is: '+urlimage);
                myHTML += '<img src="'+ urlimage +'" class="img-thumbnail" height="">';
                console.log('images/'+ childData.id +'.jpg');
                myHTML += '<h4>'+ childData.sku + ' - ' + childData.name +'</h4>';
                myHTML += '</div>';
                myHTML += '</div>';
              });
              wrapper.innerHTML = myHTML;
            });
          </script>

看起来代码正在运行 console.log('url outside of function is: '+urlimage);在运行 console.log(urlimage) 之前;

我对 Javascript 还不太熟悉,希望能在这方面得到一些帮助。

谢谢!!!

最佳答案

storageRef.child('images/'+ childData.id +'.jpg').getDownloadURL().then(function(url){
                urlimage = url;
                console.log(urlimage);
            });

您提供的代码中的上述代码实际上使用了 Promises。在处理异步数据(例如来自服务器的数据)时,您通常会使用 promises。在处理该段代码的同时,正在执行其他代码行,从而导致您所观察到的情况。异步代码的行为通常无法预测。

要使用 urlimage,您可以这样做。

storageRef.child('images/'+ childData.id +'.jpg').getDownloadURL().then(function(url){
myHTML += '<img src="'+ url +'" class="img-thumbnail" height="">';
        });

关于乱序执行的 Javascript 代码,我可以修复它吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53472038/

相关文章:

javascript - 如何在angularjs的每个请求头中发送cookie?

javascript - 如何动态地为网页中的 svg 图像着色?

javascript - Chrome 扩展 : Running Content Editor on Client Side

html - 输入类型编号在 Firefox 中不起作用

javascript - Ajax 文件上传的奇怪问题(jQuery、ASP.Net MVC)

javascript - 尝试使用 JQuery 单击 <a> 链接但标签没有任何描述符

javascript - 没有获得正确的图像宽度

html - 从 Google Images 在 R 中抓取网页

html - 如何让一个里的背景和里面的文字一样长?

html - 如何内联 2 个表单输入