【问题标题】:array.push(item) in functionarray.push(item) 在函数中
【发布时间】:2021-02-05 17:09:54
【问题描述】:

我想将所有卷推送到 arrayVolume 但不能。 在我看来,问题是异步的。但是我搜索,阅读文档但无法正确运行。 如果可以的话,请帮我解决代码。 那是我对你的感谢。 非常感谢!

function kl(data){
    var arrayVolume = [];
    for(var key in data){
        var dbId = data[key];
        viewer.getProperties(dbId, function(e){
            var propertiesObj = e.properties;
            propertiesObj.forEach(myF);
            function myF(obj){
                if(obj.displayName === "Volume"){
                    var volume = obj.displayValue;
                    arrayVolume.push(volume);
                }
            }
        });
    }
    alert(arrayVolume);
}

【问题讨论】:

  • 你说的asynchronous是什么意思?
  • 您能补充一下viewer.getProperties 的作用吗?
  • data 中的内容。什么是viewer
  • 能更好地解释你的代码吗?
  • @AliDemirci viewer.getProperties(dbId, function(e){//with dbId, here, e.properties 返回列表对象(propertiesObj)}

标签: javascript arrays asynchronous async-await


【解决方案1】:

如果 viewer.getProperties 是异步操作,例如 http 调用,则应使用 Promise。

例如:

async function kl(data) {
    var arrayVolume = [];

    for (var key in data) {
        var dbId = data[key];
        await new Promise((resolve, reject) => {
            viewer.getProperties(dbId, (e) => {
                var propertiesObj = e.properties;

                propertiesObj.forEach(myF);

                function myF(obj) {
                    if (obj.displayName === "Volume") {
                        var volume = obj.displayValue;

                        arrayVolume.push(volume);
                    }
                }

                return resolve();
            });
        });
    }
    
    alert(arrayVolume);
}

【讨论】:

  • 你太棒了。我也做过研究,但我不能像你一样应用承诺。非常感谢。
  • 请在评论@Ali Demirci 下帮助我解决同样的问题
猜你喜欢
  • 2019-06-16
  • 2022-01-20
  • 2017-04-24
  • 1970-01-01
  • 2012-07-12
  • 1970-01-01
  • 2019-07-17
  • 2022-12-07
  • 1970-01-01
相关资源
最近更新 更多