2015-07-24 2 views
0

У меня есть следующий кодНевозможно получить объект за пределами функции

function test(){ 
var api_url = "/Test/"; 

api.CFClient.load(api_url,function(success){ 

    success.images; // Object with images 
},function(error){ 

}); 

// More code to use the images returned. 

я в основном не в состоянии получить изображения с функцией успеха. Если я выполняю свой код в функции успеха, я могу получить доступ к возвращенному объекту. Как сохранить возвращаемый объект в переменной, чтобы я мог использовать этот объект в моей родительской функции, а не функцию успеха?

+0

Этот код выглядит _asynchronous_. Если вы пытаетесь получить доступ к переменной синхронно, измените на обратный шаблон –

+0

'Больше кода для использования' должен ждать, пока' образы возвращаются ', это могут быть некоторые приемники событий, например, или просто ждать в конце концов с 'setInterval' –

ответ

0

Я полагаю, api.CFClient.load асинхронный, и в этом случае вы не можете получить доступ к success.images непосредственно в функции test() после вызова функции load. Он будет доступен в какое-то неизвестное время в будущем, когда запрос ajax будет завершен. Вам придется вызывать другую функцию из вашего обратного вызова и делать то, что вам нужно делать с success.images, или делать то, что вам нужно сделать непосредственно в функции обратного вызова успеха.

0

Вам необходимо учитывать, что функция успеха является асинхронной. Вы не сможете использовать возвращенные изображения до тех пор, пока вызов api не будет завершен. Когда это возможно, вы можете вызвать другую функцию и передать изображения.

function test(){ 
    var api_url = "/Test/"; 

    api.CFClient.load(api_url,function(success){ 

     useImages(success.images); 

    }, function(error){ 
}); 

function useImages(images) { 
    // do something with images here... 
} 
+0

Пробовал this pastebin.com/B79AAcTR Продолжайте получать undefined –

+0

Добавьте 'console.log (res)' в функцию 'useImg'. В настоящее время этот console.log выполняется сразу после вызова вызова api. – mac

+0

нет никакого способа, кроме функции useImg? Я использую response.js, и мне нужны данные для рендеринга компонента. Я знаю, что console.log (res) вернется в функцию useImg. –

0

SO полна ошибок, как это (асинхронный рабочий процесс), только Google для ...

function test(){ 
    var api_url = "/Test/"; 
    function useImages(err, images) { 
    if (err) return console.error(err); 
    console.log(images); 
    } 
    api.CFClient.load(api_url,function(success){ 

    useImages(null, success.images); 
    },function(error){ 
    useImages(error); 
    }); 
} 
+0

Пробовал это http://pastebin.com/B79AAcTR Продолжайте получать неопределенные данные. –

+0

omg, используйте его в callback ('useImages'), это' undefined', потому что запрос еще не закончен, когда вы пытаетесь его использовать. Это обычное поведение асинхронных вызовов. –

+0

Вы не можете получить его там, где хотите. –

Смежные вопросы