প্রতিশ্রুতিগুলি কেবল সিনট্যাকটিক চিনি say প্রতিশ্রুতি দিয়ে আপনি যা করতে পারেন তা কলব্যাক দিয়ে করতে পারেন। আসলে, বেশিরভাগ প্রতিশ্রুতি বাস্তবায়ন যখনই আপনি চান উভয়ের মধ্যে রূপান্তর করার উপায় সরবরাহ করে।
প্রতিশ্রুতিগুলি প্রায়শই ভাল হওয়ার গভীর কারণ হ'ল তারা আরও রচনাযোগ্য , যার অর্থ প্রায়শই একাধিক প্রতিশ্রুতিবদ্ধ "কেবলমাত্র কাজ করে", যখন একাধিক কলব্যাকের সংমিশ্রণ প্রায়শই হয় না। উদাহরণস্বরূপ, কোনও পরিবর্তনশীলকে একটি প্রতিশ্রুতি দেওয়া এবং পরে এটির সাথে অতিরিক্ত হ্যান্ডলার সংযুক্ত করা তুচ্ছ বা এমনকি কোনও প্রতিশ্রুতি সমাধানের পরেই কার্যকর হয় এমন একটি প্রতিশ্রুতির একটি বিশাল গোষ্ঠীর সাথে কোনও হ্যান্ডলার সংযুক্ত করে। আপনি কলব্যাকের সাহায্যে এই জিনিসগুলি সাজানোর ক্ষেত্রে, এটি আরও অনেক কোড নেয়, সঠিকভাবে করা খুব কঠিন এবং শেষ ফলাফলটি সাধারণত অনেক কম রক্ষণাবেক্ষণযোগ্য হয়।
তাদের সামঞ্জস্যযোগ্যতা অর্জনের প্রতিশ্রুতি দেওয়া সবচেয়ে বড় (এবং সূক্ষ্মতম) উপায়গুলি হ'ল রিটার্নের মানগুলির অভিন্ন পরিচালনা এবং ব্যতিক্রম ব্যতিক্রম unc কলব্যাক সহ, কোনও ব্যতিক্রম কীভাবে পরিচালনা করা যায় তা নির্ভর করে অনেক নেস্টেড কলব্যাকগুলির মধ্যে কোনটি এটি ছুঁড়ে ফেলেছিল এবং কলব্যাক গ্রহণকারী কোন কার্যকারিতা তার বাস্তবায়নে চেষ্টা / ধরার উপর নির্ভর করে। প্রতিশ্রুতি দিয়ে, আপনি জানেন যে একটি ব্যতিক্রম যা এক কলব্যাক ফাংশন পালাতে কট অ্যান্ড এরর হ্যান্ডলার আপনার সাথে প্রদত্ত পাস হবে .error()
বা .catch()
।
উদাহরণস্বরূপ, আপনি একক প্রতিশ্রুতি বনাম একটি একক কলব্যাক দিয়েছেন, এটি সত্য যে এর কোনও তাত্পর্য নেই। যখন আপনার কাছে জিলিয়ন কলব্যাক বনাম একটি জিলিয়ন প্রতিশ্রুতি রয়েছে যে প্রতিশ্রুতি ভিত্তিক কোডটি আরও সুন্দর দেখায়।
এখানে প্রতিশ্রুতি দিয়ে লিখিত কিছু কল্পনাপ্রসূত কোড এবং তারপরে কলব্যাকের একটি প্রচেষ্টা রয়েছে যা আমি কী বলছি সে সম্পর্কে আপনাকে কিছু ধারণা দেওয়ার জন্য যথেষ্ট জটিল হওয়া উচিত।
প্রতিশ্রুতি সহ:
createViewFilePage(fileDescriptor) {
getCurrentUser().then(function(user) {
return isUserAuthorizedFor(user.id, VIEW_RESOURCE, fileDescriptor.id);
}).then(function(isAuthorized) {
if(!isAuthorized) {
throw new Error('User not authorized to view this resource.'); // gets handled by the catch() at the end
}
return Promise.all([
loadUserFile(fileDescriptor.id),
getFileDownloadCount(fileDescriptor.id),
getCommentsOnFile(fileDescriptor.id),
]);
}).then(function(fileData) {
var fileContents = fileData[0];
var fileDownloads = fileData[1];
var fileComments = fileData[2];
fileTextAreaWidget.text = fileContents.toString();
commentsTextAreaWidget.text = fileComments.map(function(c) { return c.toString(); }).join('\n');
downloadCounter.value = fileDownloads;
if(fileDownloads > 100 || fileComments.length > 10) {
hotnessIndicator.visible = true;
}
}).catch(showAndLogErrorMessage);
}
কলব্যাক সহ:
createViewFilePage(fileDescriptor) {
setupWidgets(fileContents, fileDownloads, fileComments) {
fileTextAreaWidget.text = fileContents.toString();
commentsTextAreaWidget.text = fileComments.map(function(c) { return c.toString(); }).join('\n');
downloadCounter.value = fileDownloads;
if(fileDownloads > 100 || fileComments.length > 10) {
hotnessIndicator.visible = true;
}
}
getCurrentUser(function(error, user) {
if(error) { showAndLogErrorMessage(error); return; }
isUserAuthorizedFor(user.id, VIEW_RESOURCE, fileDescriptor.id, function(error, isAuthorized) {
if(error) { showAndLogErrorMessage(error); return; }
if(!isAuthorized) {
throw new Error('User not authorized to view this resource.'); // gets silently ignored, maybe?
}
var fileContents, fileDownloads, fileComments;
loadUserFile(fileDescriptor.id, function(error, result) {
if(error) { showAndLogErrorMessage(error); return; }
fileContents = result;
if(!!fileContents && !!fileDownloads && !!fileComments) {
setupWidgets(fileContents, fileDownloads, fileComments);
}
});
getFileDownloadCount(fileDescriptor.id, function(error, result) {
if(error) { showAndLogErrorMessage(error); return; }
fileDownloads = result;
if(!!fileContents && !!fileDownloads && !!fileComments) {
setupWidgets(fileContents, fileDownloads, fileComments);
}
});
getCommentsOnFile(fileDescriptor.id, function(error, result) {
if(error) { showAndLogErrorMessage(error); return; }
fileComments = result;
if(!!fileContents && !!fileDownloads && !!fileComments) {
setupWidgets(fileContents, fileDownloads, fileComments);
}
});
});
});
}
কলব্যাক্স সংস্করণে কোড ডুপ্লিকেশন হ্রাস করার কিছু চতুর উপায় থাকতে পারে এমনকি প্রতিশ্রুতি ছাড়াই, তবে আমি খুব ভাল প্রতিশ্রুতিযুক্ত কিছু বাস্তবায়িত করতে সিদ্ধ হওয়ার কথা ভাবতে পারি ones