LINUX.ORG.RU

Как получить значение из функции?

 ,


0

1

Добрый вечер, приспичило побыдлокодить на JS, не пойму никак, как мне получить значение из функции такого вида?

function getNextNid(point) {
            var nextPoint;
            $.get("/get/nextnid/" + point, function (data) {                
                console.log( "Data Loaded: " + data );
                nextPoint = data;                
            });            
            return nextPoint;            
        }

Т.е. в функцию передаю параметр, число, каллбэк возвращает другое, и нужно чтобы при

nextNodeNid = getNextNid(100500);

nextNodeNid получило это новое число.

Так он выдает undefined.

★★

Так не получится. Либо с колбеками работать, либо промис возвращать и позже резолвить.

Vit ★★★★★ ()
function getNextNid(point, onSuccess) {
    $.get("/get/nextnid/" + point, function (data) {
        console.log( "Data Loaded: " + data );
        onSuccess(data);
    });
}
Kilte ★★★★★ ()
Ответ на: комментарий от Sora

Нужно не просто число получить, а сделать с ним что-то. Вот это что-то нужно делать внутри коллбек-функции.

redixin ★★★★ ()

Да, в этом вашем JS не принято ответов дожидаться, а принято коллбеки вешать. Если бы жс был синхронный, то там нужно было бы пилить поддержку тредов. А если бы в ЖС юзали треды, то я даже боюсь представить каков ад творился бы у людей в браузерах.

redixin ★★★★ ()

просто значение ф-ции возвращается до того, как выполнился колбек (get)

Dred ★★★★★ ()

Я бы сделал так

function getNextNid(point) {

            return $.get("/get/nextnid/" + point);
        }

…
var myPoint=…;
getNextNid(myPoint).then(function (data) {                
                console.log( "Data Loaded: " + data );
               Обрабатываем результат
            });

Так у нас запрос отделен от обработки результата. И мы можем заменить запрос фековыми данными при необходимости. Опять же код станвится проще.

Jaberwock ★★★ ()

Передавай ссылку на объект куда писать колбэку или адрес куда писать.

У тебя должна быть цепочка событий - колбэк вызвал триггер контекста, контекст сообщил наблюдателем о событие (фактически это то-же вызов триггера) и т.д. ;)

anonymous ()

Если надо именно такое поведение твоего быдлоколда, то юзай синхронный запрос и наслаждайся содвисшим броузером

function getNextNid(point) {
    var nextPoint;
    $.ajax({
    	url : 	"/get/nextnid/" + point,
    	method: 'GET',
    	async : false,
    	success : function (data) {                
	        console.log( "Data Loaded: " + data );
	        nextPoint = data;                
    	},
    	error : function(errData) {
    		console.log('Something goes wrong '); 
    	}
    });            
    return nextPoint;            
}

anonymous ()

Не поддавайся на провокации с коллбэками, используй промисы.

function getNextNid (point) {
    return $.Deferred(function (deferred) {
        $.get("/get/nextnid/" + point, function (data) {                
            deferred.resolve(data);                
        }).fail(function () {
            deferred.reject();
        }); 
    }).promise();
}

getNextNid(100500).done(function (data) {
    console.log('success', data);
}).fail(function () {
    console.log('error');
});

SOmni ★★ ()
Последнее исправление: SOmni (всего исправлений: 2)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.