valeur de retour d'une fonction de rappel jquery get
-
26-12-2019 - |
Question
Cela me serait très utile si vous pouviez m'aider à corriger cette fonction :
textParseQuery = (txtSnippet) ->
queryUrl = "http://localhost:8083/txtParse/#{txtSnippet}"
console.log queryUrl
callback = (response) =>
parsed = $.parseJSON response
companies = parsed.map (obj) -> new Company(obj.name, obj.addr)
companies
res = $.get queryUrl, {}, callback
console.log res
Je voudrais récupérer les résultats du rappel afin que le textParseQuery
la fonction pourrait renvoyer une valeur.
La solution 2
j'ai découvert Café glacéScript aide à rationaliser le flux de contrôle asynchrone avec await
et defer
.C’est ce que j’ai essayé de réaliser.La structure du code est telle que je l'imaginais
# Search for 'keyword' on twitter, then callback 'cb'
# with the results found.
search = (keyword, cb) ->
host = "http://search.twitter.com/"
url = "#{host}/search.json?q=#{keyword}&callback=?"
await $.getJSON url, defer json
cb json.results
Autres conseils
L'intérêt d'un rappel est qu'il est asynchrone, votre réponse arrive dans le rappel, vous devez donc gérer le reste de l'exécution à partir du rappel (par exemple, le console.log res
va s'exécuter avant que votre rappel ne soit appelé, car il fait partie de la même exécution synchrone de votre appel ajax).
textParseQuery = (txtSnippet) ->
queryUrl = "http://localhost:8083/txtParse/#{txtSnippet}"
callback = (response) ->
parsed = $.parseJSON response
companies = parsed.map (obj) -> new Company(obj.name, obj.addr)
# proceed from here
console.log companies
$.get queryUrl, {}, callback
Note supplémentaire:la grosse flèche n'est pas nécessaire ici, elle sert à relier quoi this
fait référence, mais vous ne faites pas référence this
du tout dans votre rappel.Si vous apprenez le café, la plupart des éditeurs auront des plugins/modules pour compiler rapidement le café en JS, alors utilisez-les pour voir à quoi correspond une syntaxe de café donnée en JS (par exemple, jetez un œil à la différence entre l'utilisation de ->
et =>
quand tu prépares ton café)