दिलचस्प पोस्ट
डाटाबेस बनाम JSON को संग्रहीत करना प्रत्येक कुंजी के लिए एक नया कॉलम बना रहा है अगले पृष्ठ पर PHP पास चर क्या सी / सी ++ में% (मॉड्यूलस) का उपयोग करने के लिए कोई विकल्प है? Android में प्रत्येक डायनामिक रूप से निर्मित संपादन टेक्स्ट से डेटा कैसे प्राप्त करें? PhpMyAdmin में UTF-8 वर्ण कैसे प्रदर्शित करें? पीएचपी में एक फाइल को पढ़ने के लिए कम से कम स्मृति गहन तरीके जावा स्ट्रिंग.substring विधि संभावित स्मृति रिसाव? किस उपयोगकर्ता को स्क्रिप्ट चलाने के द्वारा क्रॉन्टाब में निर्दिष्ट किया जाए? Three.js: रोटेट ऑब्जेक्ट के बच्चों को जोड़ना और निकालना जावास्क्रिप्ट के साथ दिनांक कैसे जोड़ / घटाना? आर-प्रोजेक्ट 'मेटा' के लिए कोई लागू विधि क्लास "वर्ण" के ऑब्जेक्ट पर लागू नहीं है Windows पर एक फ़ाइल नाम मान्य करें जावास्क्रिप्ट स्विच बनाम अगर … और अगर … और पार्स NSURL क्वेरी प्रॉपर्टी स्ट्रिंग से एक क्लास का निर्माण करना और इसे स्काला 2.10 में इंस्टाल्ट करना

मैं वादा के अंदर स्थिति कैसे वापस कर सकता हूं?

मैंने लूपबैक और जेएसएफएफ के साथ वादा सीखना शुरू किया, और इस समस्या को संभाल नहीं सका; मैं cb () फ़ंक्शन के लिए वायर्ड में स्टेटस वापस नहीं लौटा सकता असल में मैं बिक्रीबल से जुड़ना चाहता हूं और जेएसफोर्स के माध्यम से डाटा प्राप्त करना चाहता हूं और इसे डीओबी लूपबैक के माध्यम से लिखना है। फिर रिमोट उड़ाने के बाद ग्राहक को बनाया / अद्यतन / त्रुटि रिकॉर्ड वापस करना चाहते हैं

मैं नोड के जरिए लूपबैक के साथ विकसित कर रहा हूं। जेएस एंड एक्सप्रेस। जेएस मैं बिक्रीबल कनेक्ट करने के लिए जेसबस लाइब्रेरी का उपयोग कर रहा हूं

मैं कैसे इसे ठीक कर सकता हूं?

यहां मेरा कोड है:

module.exports = function(Contact) { var jsforce = require('jsforce'); var async = require("async"); var lr = require('lr.js'); Contact.ImportContacts = function(cb) { // Salesforce Projects List var sf_projects = []; //Salesforce Conn String var conn = lr.SalesforceConn(); conn.apex.get("/Contact/", function(err, res) { var status = { "Created": [], "Updated": [], "Error": "" }; if (err) console.log(err); sf_projects = res; // Clear result status.Created.length = 0; status.Updated.length = 0; status.Error = ""; if (sf_projects != undefined) { async.eachSeries(sf_projects, function(contact, callback) { Contact.findOrCreate({ where: { co_SalesforceID: contact.Id } }, { co_Name: contact.FirstName, co_Surname: contact.LastName, co_Salutation: contact.Salutation, co_Title: contact.Title, co_Department: contact.Department, co_Email: contact.Email, co_PhonePersonal: contact.HomePhone, co_PhoneWork: contact.Phone, co_PhoneCell: contact.MobilePhone, co_Description: contact.Description, co_SalesforceID: contact.Id }, function(err, cntct, created) { if (err) console.log(err); if (created) { status.Created.push(cntct.id); console.log("Contact created. SalesForeID: " + cntct.co_SalesforceID + " ContactName: " + lr.isDefined(cntct.co_Salutation) + " " + lr.isDefined(cntct.co_Name) + " " + lr.isDefined(cntct.co_Surname)); } else { Contact.replaceById(cntct.id, { co_Name: contact.FirstName, co_Surname: contact.LastName, co_Salutation: contact.Salutation, co_Title: contact.Title, co_Department: contact.Department, co_Email: contact.Email, co_PhonePersonal: contact.HomePhone, co_PhoneWork: contact.Phone, co_PhoneCell: contact.MobilePhone, co_Description: contact.Description, co_SalesforceID: contact.Id }, false, function(err, obj) { if (err) console.log(err); status.Updated.push(obj.id); console.log("Contact updated. SalesForeID: " + obj.co_SalesforceID + " ContactName: " + lr.isDefined(obj.co_Salutation) + " " + lr.isDefined(obj.co_Name) + " " + lr.isDefined(obj.co_Surname)); }); } }); callback(err); }, function(err) { if (err) console.error(err); }); } else { console.log("Salesforce Connection Error!"); status.Error = "Salesforce Connection Error"; } return Promise.resolve(status); }).then(function(end) { cb(null, end); }).catch(function(err) { if (err) console.log(err); }); }; Contact.remoteMethod( 'ImportContacts', { returns: { arg: 'result', type: 'string' }, http: { path: '/importContacts', verb: 'get' } } ); }; 

वेब के समाधान से एकत्रित समाधान "मैं वादा के अंदर स्थिति कैसे वापस कर सकता हूं?"

यह पूरी तरह से स्पष्ट नहीं है कि क्या पूछ रहा है, और आप अपने solve() फ़ंक्शन solve() शामिल नहीं करते हैं जो यहां महत्वपूर्ण हो सकता है, इसलिए मैं आपको केवल कुछ सामान्य सुझाव दे सकता हूं

आपके पास ऐसा कुछ है:

 }).then(function(end) { cb(null, end); }).catch(function(err) { if (err) console.log(err); }); 

पहला भाग ( then ) से पता चलता है कि नोड कॉलबैक के सामान्य सम्मेलन के बाद cb() कॉलबैक त्रुटि को पहली तर्क के रूप में लेता है और दूसरा तर्क के रूप में मान होता है।

लेकिन फिर दूसरे भाग में ( catch ) आप कॉलबैक को त्रुटि के साथ कॉल नहीं करते हैं इसके अलावा, if (err) catch हेन्डलर में से बेमानी है, तो हमेशा एक त्रुटि होगी, जब तक solve() फ़ंक्शन अस्वीकृति के कारण निर्दिष्ट false या null साथ अस्वीकृत वादे देता है – और फिर भी, अस्वीकृति के कारण जो भी हो , कॉलबैक को हमेशा त्रुटि के मामले में बुलाया जाना चाहिए:

 }).then(function(end) { cb(null, end); }).catch(function(err) { console.log(err); cb(err); }); 

इस तरह आपको ऐसी स्थिति नहीं मिलेगी जहां कॉलबैक कभी नहीं बुलाया जाता है और हमेशा के लिए प्रतीक्षा करता है जब आप पारंपरिक कॉलबैक के साथ वादों को मिलाते हैं, तो आपको कुछ चीजों को ध्यान में रखना होगा:

कोई भी कार्य जिसे एक तर्क के रूप में कॉलबैक मिलता है, यह सुनिश्चित करना चाहिए कि यह कॉलबैक कहा जाता है और यह वास्तव में एक बार कहा जाता है फंक्शन लेखक के रूप में यह सुनिश्चित करना आपकी ज़िम्मेदारी है कि त्रुटि के मामले में आपको चलाना चाहिए:

 callback(error); 

और सफलता के मामले में आपको कॉल करना चाहिए:

 callback(null, data); 

इस तरह, callback यह जान सकता है कि ऑपरेशन कब समाप्त हो गया है और क्या यह पहली सफलता का परीक्षण करके सफलता या विफलता के साथ समाप्त हो गया है:

 function (err, data) { if (err) { console.log('Error:', err); } else { console.log('Success:', data); } } 

कॉलबैक लेते हुए फ़ंक्शन के पूरे आमंत्रण आम तौर पर होता है:

 functionTakingCallback('some', 'arguments', function (err, data) { if (err) { console.log('Error:', err); } else { console.log('Success:', data); } }); 

दूसरी तरफ यदि फ़ंक्शन वादा करता है, तो आप इसे इस तरह प्रयोग करते हैं:

 functionReturningPromise('some', 'arguments') .then(function (data) { console.log('Success:', data); }) .catch(function (err) { console.log('Error:', err); }); 

इस मामले में परीक्षण की कोई ज़रूरत नहीं है।

कॉलबैक को हमेशा ठीक एक बार कहा जाना चाहिए। वादा हमेशा या तो हल हो जाए या अंत में खारिज हो जाएं। उपयोग अलग है और कॉलर और कैली दोनों की जिम्मेदारी अलग है। जब आप उन दो शैलियों को मिलाते हैं – फ़ंक्शंस जो परंपरागत नोड-स्टाइल कॉलबैक लेती हैं और फ़ंक्शन जो वादे करते हैं – तो आपको उन अंतरों से सावधान रहना होगा

आप कभी-कभी ऐसे फ़ंक्शंस को रूपांतरित कर सकते हैं जो promisify() जैसी लाइब्रेरीज़ का उपयोग करने के वादे के लिए कॉलबैक लेते हैं और इसके promisify() और promisifyAll() को अपने पूरे कोड बेस में अपने सभी promisifyAll() कार्यों के लिए सुसंगत एपीआई रखना है। देख:

आप कुछ अन्य उत्तर देख सकते हैं जहां मैं कॉलबैक और वादों के बीच के अंतर को समझाता हूं और उन्हें अधिक विवरण में एक साथ कैसे उपयोग करें, जो इस मामले में आपके लिए सहायक हो सकता है:

  • कॉलबैक और वादों का उपयोग करने के तरीके पर विस्तृत विवरण
  • जटिल अनुरोध हैंडलरों में वादों का उपयोग करने के तरीके पर स्पष्टीकरण
  • AJAX अनुरोधों के उदाहरण पर वास्तव में एक वादा क्या है, इसका विवरण