promesas - angularjs-HTTPpromise no se ejecuta cuando se devuelve JSONP
promise angularjs (1)
No escribo coffeescript, así que lo traduje a javascript. Se olvidó de inyectar el servicio $location
, aparte de eso, simplemente reemplacé la callback=stock_quote_callback
por callback=JSON_CALLBACK
y creé un plunker que funciona perfectamente: http://run.plnkr.co/hCAdohIJIr9Odn3m/ (fuente: http: / /plnkr.co/edit/a7C6k0QVoXnaTyImSUkb?p=preview ).
angular.module(''Services'').service(''StockSupplier'', function($http,$location) {
var get_stock;
get_stock = function(symbol) {
var q, url;
q = ''select * from yahoo.finance.quotes where symbol in ("'' + symbol + ''")&''+
''format=json&''+
''diagnostics=true&''+
''env=http://datatables.org/alltables.env&''+
''callback=JSON_CALLBACK '';
url = ''http://query.yahooapis.com/v1/public/yql?q='' + q;
return $http.jsonp(url).then(function(data) {
alert(''This should pop up when result returns'');
$location.path( ''/stocks/show_stock'' );
});
};
return {
get_stock: function(symbol) {
return get_stock(symbol);
}
};
});
Estoy tratando de obtener una cotización de acciones de la API de Yahoo y estoy usando el método $ http.jsonp de angular. El objetivo es cuando el resultado regrese, para que la aplicación vaya a esta ruta: ''/ stocks / show_stock''. Intento hacerlo de dos maneras y ninguna de las dos funciona 1) Puse la declaración:
window.location = ''/stocks/show_stock''
en la función de devolución de llamada que envuelve la respuesta JSONP 2) Puse la declaración:
$location.path ''/stocks/show_stock''
en la devolución de llamada HTTPpromise. (ver los comentarios en el código)
Aquí está mi código (en coffescript):
#THIS IS THE CALLBACK FUNCTION THAT I SEND WITH THE JSONP REQUEST
window.stock_quote_callback = (data)->
console.log data #THIS WORKS AND I CAN SEE THE DATA RETURNED FROM YAHOO
window.stock_quote_result = data.results
alert ''I am in the callback''
#THE STATEMENT BELOW DOES NOT WORK EVEN THOUGH I CAN SEE THE ALERT ABOVE
window.location = ''/stocks/show_stock''
angular.module(''Services'').service ''StockSupplier'', ($http)->
get_stock = (symbol)->
q = ''select * from yahoo.finance.quotes
where symbol in ("''+symbol+''")
&format=json&
diagnostics=true&
env=http://datatables.org/alltables.env&
callback=stock_quote_callback''
url = ''http://query.yahooapis.com/v1/public/yql?q=''+q
$http.jsonp(url).then (data)->
#THE CODE BELOW NEVER EXECUTES EVEN THOUGH RESULT IS RETURNED
alert ''This should pop up when result returns''
$location.path''/stocks/show_stock''
{
get_stock: (symbol)-> get_stock(symbol)
}
Gracias de antemano.