0

Есть функция-обертка для передачи даты Get запроса в оборачиваемую функцию:

function getArray(callback) {
    var $ret = 0;
    $.ajax({
        type: 'GET',
        url: '/api/get_array/4',
        dataType: 'JSON',
        success: function (data) {
            callback(data);
        }
    });
    return $ret;
}

Функция "passable" использует функцию "getArray" для формирования списка "passable_list":

function passable(coordinate){
            getArray(function (data) {
                col = data.field_code[coordinate]["col"];
                row = data.field_code[coordinate]["row"];
            // console.log(data.field_code[coordinate]["col"],data.field_code[coordinate]["row"]);
            var passable_list = [];
                for (field in data.field_code){
                    if (((Math.abs(data.field_code[field]['col'] - col) <= 1)
                        &&(Math.abs(data.field_code[field]['row'] - row) <= 1))
                        && !((Math.abs(data.field_code[field]['col'] - col)=== 0)
                        &&(Math.abs(data.field_code[field]['row'] - row) === 0)))
                    {
                        if(data.field_code[field]['move_to'][0]){
                        for (item in data.field_code[field]['move_to']){
                            switch(data.field_code[field]['move_to'][item]){
                                case 3:
                                    passable_list.push(find_coordinate(data.field_code[field]['col']+1,data.field_code[field]['row']-1,data.field_code));
                                    break;
                                default:
                                    console.log('HUE&amp;&amp;&amp;')
                            }
                        }
                        console.log(data.field_code[field]['move_to'])
                    }
                    passable_list.push(data.field_code[field]['crd'])
                }
            }
        });

}

Никак не могу понять, как из "passable" правильно вернуть "passable_list", ведь "getArray" никак не использует возвращаемые значения с оборачиваемой функции. Ну а если из "getArray" можно было бы банально вернуть "data" - было бы вообще замечательно.

  • Вы догадались передать callback в функцию getArray. Почему вы не можете сделать для passable то же самое? – Pavel Mayorov May 10 '17 at 10:29

1 Answers1

-1
function passable(coordinate){
return new Promise(function(resolve, reject) {
    getArray(function (data) {
        col = data.field_code[coordinate]["col"];
        row = data.field_code[coordinate]["row"];
        // console.log(data.field_code[coordinate]["col"],data.field_code[coordinate]["row"]);
        var passable_list = [];
        for (field in data.field_code){
            if (((Math.abs(data.field_code[field]['col'] - col) <= 1)
                &&(Math.abs(data.field_code[field]['row'] - row) <= 1))
                && !((Math.abs(data.field_code[field]['col'] - col)=== 0)
                &&(Math.abs(data.field_code[field]['row'] - row) === 0)))
            {
                if(data.field_code[field]['move_to'][0]){
                    for (item in data.field_code[field]['move_to']){
                        switch(data.field_code[field]['move_to'][item]){
                            case 3:
                                passable_list.push(find_coordinate(data.field_code[field]['col']+1,data.field_code[field]['row']-1,data.field_code));
                                break;
                                default:
                                    console.log('HUE&&&')
                            }
                        }
                        console.log(data.field_code[field]['move_to'])
                    }
                    passable_list.push(data.field_code[field]['crd'])
                }
            }

            resolve({
                list: passable_list,
                data
            })
        });
    });
}

passable(you_coordinate).then(obj=>{console.log(obj.list, obj.data);});
grnch
  • 709
  • Тогда уж new Promise(getArray).then(...) – Pavel Mayorov May 10 '17 at 10:30
  • А еще лучше - исправить getArray чтобы она сама возвращала обещание, выйдет еще короче – Pavel Mayorov May 10 '17 at 10:31
  • хотел оставить максимальную целостность кода, чтоб пример был более понятен. – grnch May 10 '17 at 20:44