سؤال

سيكون من المفيد جدا بالنسبة لي إذا كنت تستطيع مساعدتي في إصلاح هذه الوظيفة:

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 على الإطلاق في رد الاتصال الخاص بك.إذا كنت تعلم القهوة ، فإن معظم المحررين لديهم البرنامج المساعد / وحدات لتجميع القهوة بسرعة إلى جس ، وذلك باستخدام ذلك لمعرفة ما بناء جملة القهوة معين يجمع ل في جس (على سبيل المثال ، نلقي نظرة على الفرق بين استخدام -> و => عند تجميع القهوة الخاص بك)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top