Zwracanie zmiennych z funkcji callback

0

Witam serdecznie,
od jakiegoś czasu walczę z takim tematem: pobieram sobie dane w jsonie, i chcę je wykorzystywać. Danymi są parametry tabel (w tym przypadku kolumny) różne w zależności od parametru 'arg'. Chcę teraz móc wywoływać tę funkcję w różnych miejscach i pobierać sobie nagłówki kolumn.
W kilku miejscach w internecie przy podobnych rozwiązaniach znalazłem przykłady wywołania funkcji i sprawdzania wyników za pomocą alert lub console.log - u mnie też to działa (poniżej zamieszczam kod).
Nie wiem jednak jak zrobić, żeby tablicę kolumn wykorzystać w innej funkcji - tak jakbym miał zwykłą funkcję i zwracał z niej tablicę poleceniem return.

         function getColumns(arg, tableColumns) {
            $.ajax({
                url: "/tables/diagrams/" + arg,
                data: "json/columns",
                success: function (json) {
                    var columns = [];
                    $.each(json.columns, function (i, val) {
                        columns.push(val.Header);
                    });
                    tableColumns(columns);
                },
                dataType: "json"
            });
        }
		
		
		getColumns(1, function (output) {
            console.log(output);
			alert(output);
		});

Pozdrawiam.

1

W JS Return z wywołania asynchronizcznego - nie da się.

Ale da się nawet lepiej : musisz opanować Promise.
https://developer.mozilla.org/pl/docs/Web/JavaScript/Reference/Global_Objects/Promise
http://adamczuk.net.pl/2013/04/01/javascript-promises-czy-rzeczywiscie-takie-przydatne/

0

Dzięki za linki. Szukając rozwiązania trafiłem parę razy na promise, ale gdzieś wyczytałem, że to nowinka, która może nie działać na wszystkich przeglądarkach. Zgłębię temat i dam znać ;)

1

Promise zasadniczo działa na wszystkich przeglądarkach które jako tako wspierają JavaScript. W nagorszym razie (nie wspieranie ECMA 6 ) stosujesz polyfill tego typu:
https://github.com/taylorhakes/promise-polyfill

1 użytkowników online, w tym zalogowanych: 0, gości: 1