2014-10-18 12 views
13

मैं पिछले 3 दिनों से इस पर दीवार से अपना सिर मार रहा हूं।वादे के साथ चेनिंग वॉटरलाइन कॉल

मैं sailsjs & का उपयोग कर रहा हूं जो बंडल की गई वाटरलाइन ओआरएम का उपयोग कर रहा है। मैं डीबी को एक दूसरे के बाद कॉल करना चाहता हूं। मुझे पता है कि मैं इसे "फिर" कॉल के अंदर घोंसले से कर सकता हूं लेकिन यह गलत लगता है।

मैं क्यू प्रलेखन से अधिक हो गया है और कई बार ट्यूटोरियल लेकिन मैं अभी भी कनेक्ट और आग "फिर" क्रमिक रूप से मौजूदा वादे से :(

कॉल मैं चाहता हूँ करने के लिए करने के लिए कैसे नहीं मिलता है:

  1. एक कार्रवाई
  2. लिंक उपयोगकर्ता & कार्रवाई
  3. अद्यतन उपयोगकर्ता बनाने के एक उपयोगकर्ता
  4. बनाने
  5. अद्यतन कार्रवाई

मेरे कोड की तरह

var mail = '[email protected]'; 

Users.create({email:mail, name:''}).then(console.log).fail(console.log); 

Actions.create({actionID:123}) 
.then(function(error, action){ 
     Users.findOneByEmail(mail).then(function(person){ 
      person.actions.add(action.id); 
      person.save(console.log); 
     }).fail(console.log) 
    }); 

Users.update({email:mail},{name:'Brian'}).exec(console.log); 
Actions.update({actionID:123},{now:'running'}).exec(console.log); 

लगता है कि आप कोड मैं तो कार्यकारी & का मिश्रण का उपयोग कर से देख सकते हैं: पी

मैं जिस तरह से लगता है उपयोगकर्ता.क्रेट (...)। - -> action.create (...)। - - users.findOneByEmail (...)। फिर -> * और अपडेट को कनेक्ट करना है।

किसी भी मदद

उत्तर

13

तो एक दिन के अनुसंधान के बाद से विशाल धन्यवाद। मुझे लगता है कि मैंने इसे तोड़ दिया है।

नोट: पहले संस्करण मैं काम कर गया "फिर" s लाइन-अप (कयामत की पिरामिड को हटाने) बनाने के वापस लौट कर किया था। यह मुझे बनाने के लिए अगली पंक्ति पर कॉल करने की अनुमति देता है। http://documentup.com/kriskowal/q/#tutorial/chaining

यहाँ मेरी अंतिम संस्करण

var mail = '[email protected]';  

Users.Create({email:mail,name:''}) 
    .then(function(user){ 
    return [Actions.create({actionID:123}),user]; 
    }).spread(function(action, user){ 

    user.action.add(action.id); 
    user.name = 'Brian'; 
    user.save(); 

    action.now = 'running'; 
    action.save(); 
    }).catch(console.error); 

शांत बातें "फैल" है कि आप लाइन-अप करने के लिए "वादे" और "मूल्यों" एक वापसी की अनुमति देता है कि वे सभी पूरी कर ली है में से एक है अगले "फिर" में।

+0

आपकी 'विफल' काम नहीं करेगी और 'पकड़' पसंद करेगी। उस अच्छे काम के अलावा! –

+0

धन्यवाद @ बेंजामिनग्रेनबाम मुझे नहीं पता था कि मुझे अंतिम किए गए() या फिर() जैसे '}} की आवश्यकता है)। फिर()। असफल ('। क्या यह काम करेगा? या विफल (...) एक पकड़ (...) के लिए आपका क्या मतलब है? – codemeasandwich

+0

http://documentup.com/kriskowal/q/#tutorial पर भी पहला उदाहरण है 'कैच (...)। किया();' हम क्यों करते हैं अंतिम ** किया ** ** – codemeasandwich

संबंधित मुद्दे