简体   繁体   English

function 中的 array.push(item)

[英]array.push(item) in function

I want to push all volume to arrayVolume but can't.我想将所有卷推送到 arrayVolume 但不能。 In my opinion the problem is asynchronous.在我看来,问题是异步的。 But I search, read document but can't do it run correct.但是我搜索,阅读文档但无法正确运行。 Please help me solve the code if you can.如果可以的话,请帮我解决代码。 That is my gratitude to you.那是我对你的感谢。 Many thanks!非常感谢!

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);
}

If that viewer.getProperties is an async operation, like an http call, you should use promises.如果该viewer.getProperties是异步操作,例如 http 调用,则应使用 Promise。

For example:例如:

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);
}

I have the same problem again here.我在这里又遇到了同样的问题。 How can I deal with it.我该如何处理。 Actually I still can't understand async await promises.实际上我仍然无法理解异步等待承诺。 klht return no object. klht 没有返回 object。 @Ali Demirci @阿里德米尔西

        var klht = [];
    dataViewerFirst.forEach(obj => {
        var externalId = obj.externalId;
        var _projectName = obj.projectName;
        var status = obj.status;
        if(externalId !== null && externalId !== undefined && _projectName === projectName && status === 1){
            
            viewer.model.getExternalIdMapping(data => first(data));
            async function first(data){
                dbId = data[externalId];
                await new Promise((resolve, reject) => {
                    viewer.getProperties(dbId, function(e){
                        var propertiesObj = e.properties;
                        propertiesObj.forEach(myF);
                        function myF(obj){
                            if(obj.displayName === "Volume"){
                                var volume = obj.displayValue;
                                klht.push(volume);
                                console.log('vol '+volume);
                            }
                        }
                        return resolve();
                    });
                    
                })
                //return resolve();
            }
        }
    })
    console.log('v '+klht);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM