Wywołanie funkcji po zakończeniu poprzedniej

0

Witam, mam problem z wywołaniem callbacka. chciałbym aby jedna funkcja JS-owa wywołała się po drugiej, dlaczego? Ponieważ pierwsza funkcja wykonuje działanie które do obiektu Javowego, wrzuca mi wartość, którą potrzebuję pobrać w drugiej. Aktualnie metody wykonywane sa asynchronicznie więc w drugiej funkcji nie otrzymuje nic z obiektu.

Wygląda to następująco. Pierwsza powinna wykonać się poniższa funkcja:

 function addPublisher(form,callback) {
		dat.get('addPublisherWindow').closeAH();
		wait(true,true);
		var p='action=add&pubName='+form.name.value+'&pubShort='+form.shortName.value;
		sendSignalXMLPost('${burlax}', function (text,info,warn) {if (warn==null){wait(false,true);}},p);
		return false;
	}

ona w metodzie java uzupełnia mi w wartość w obiekcie. Następnie chciałbym aby wykonała się poniższa metoda w której wyciągam z wartość obiektu i wykonuję "inertValueAndClose":

 function getNewPublisherIdFromPost() {
        $("#newPublisher").val('${ma.newPublisher}');
        var newPublisher = document.getElementById('newPublisher').value;
        if ( newPublisher.length > 0 ) {
            insertValueAndClose(null,newPublisher, form.name.value)
        }
    }

Próbowałem metody z callback ale niestety nie działało. Być może robiłem coś źle. Pozdrawiam

0

Poczytaj o promises albo callbacks.

1

Przykład na szybko

function somefunction1(callback) {
alert('blablablblab');
callback('witam');
}

function somefunction2(msg) {
alert(msg);
}

somefunction1(somefunction2);
0

robię w ten sposób:

function addPublisher(form,callback) {
        if (form.name.value.length > 0 || form.shortName.value.length > 0) {
		dat.get('addPublisherWindow').closeAH();
		wait(true,true);
		var p='action=addPublisher&pubName='+form.name.value+'&pubShort='+form.shortName.value;
		sendSignalXMLPost('${burlax}', function (text,info,warn) {if (warn==null){wait(false,true);}},p);
        }
		return false;
        callback();
	}

    function getNewPublisherIdFromPost() {
            $("#newPublisherId").val('${ma.newPublisherId}');
            var newPublisherId = document.getElementById('newPublisherId').value;
            insertValueAndClose(null,newPublisherId, form.name.value)
        }

    addPublisher(getNewPublisherIdFromPost);

1

to jak ma ci działać skoro masz return false; przed wywołaniem callback? Wiesz co robi return?

0
Altaro napisał(a):

robię w ten sposób:

function addPublisher(form,callback) {
        if (form.name.value.length > 0 || form.shortName.value.length > 0) {
		dat.get('addPublisherWindow').closeAH();
		wait(true,true);
		var p='action=addPublisher&pubName='+form.name.value+'&pubShort='+form.shortName.value;
		sendSignalXMLPost('${burlax}', function (text,info,warn) {if (warn==null){wait(false,true);}},p);
        }
		return false;
        callback();
	}

    function getNewPublisherIdFromPost() {
            $("#newPublisherId").val('${ma.newPublisherId}');
            var newPublisherId = document.getElementById('newPublisherId').value;
            insertValueAndClose(null,newPublisherId, form.name.value)
        }

    addPublisher(getNewPublisherIdFromPost);

to nie może działać bo funkcja addPublisher przyjmuje 2 argumenty a w wywołaniu przekazujesz tylko jeden. Wychodzi np getNewPublisherIdFromPost.name.value.length zamiast form.name.value.length :) a parametr callback przyjmuje wartość undefined wiec na koniec próbujesz 'wywołac' undefined

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