قيمة الإرجاع من وظيفة مسج الحصول على رد
-
26-12-2019 - |
سؤال
سيكون من المفيد جدا بالنسبة لي إذا كنت تستطيع مساعدتي في إصلاح هذه الوظيفة:
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
وأود أن جلب النتائج من رد الاتصال بحيث textParseQuery
وظيفة يمكن إرجاع قيمة.
المحلول 2
لقد اكتشفت إيسيدكوفيسكريبت يساعد على تبسيط تدفق التحكم غير المتزامن مع await
و defer
.هذا ما حاولت تحقيقه.هيكل الكود هو كيف تخيلته
# 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
نصائح أخرى
نقطة رد الاتصال هي أنها غير متزامنة ، ويأتي ردك في رد الاتصال ، لذلك تحتاج إلى التعامل مع بقية التنفيذ من رد الاتصال (على سبيل المثال ، console.log res
سيتم تنفيذه قبل استدعاء رد الاتصال الخاص بك ، لأنه جزء من نفس التنفيذ المتزامن لمكالمة أجاكس الخاصة بك).
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
ملاحظة إضافية:سهم الدهون غير ضروري هنا ، يتم استخدامه لإعادة ربط ما this
يشير إلى ، لكنك لا تشير إلى this
على الإطلاق في رد الاتصال الخاص بك.إذا كنت تعلم القهوة ، فإن معظم المحررين لديهم البرنامج المساعد / وحدات لتجميع القهوة بسرعة إلى جس ، وذلك باستخدام ذلك لمعرفة ما بناء جملة القهوة معين يجمع ل في جس (على سبيل المثال ، نلقي نظرة على الفرق بين استخدام ->
و =>
عند تجميع القهوة الخاص بك)