javascript - როგორ დავადგინოთ, როდესაც NodeJs-ის დაგეგმილი ბოლო სამუშაო შესრულება ხდება?
არის რაიმე გზა, რომ შეამოწმოთ, როდისთვის შესრულდა ბოლო სამუშაო, მჭირდება სამუშაოს წაშლა მონაცემთა ბაზიდან, როდესაც დაგეგმილი სამუშაო დასრულდება.
გმადლობთ წინასწარ.
აქ არის სამუშაოს შექმნის კოდი:
const job = schedule.scheduleJob(
{
start: scheduledJob.startTime,
end: scheduledJob.endTime,
rule: cronExp,
},
() => {
this.jobService.send(scheduledJob);
console.log("sent notification");
}
);
უპასუხე #1
მე ვცადე ეს დავწერო კომენტარში, მაგრამ კომენტარი ძალიან პატარა იყო და მეტ MD მხარდაჭერა მჭირდებოდა იმის გასაჩვენებლად, როგორ უნდა გააკეთოთ ის, რისი შეყვანასაც მთხოვდით. ფაქტობრივად, თქვენ ბევრი არაფერი თქვით, მაგრამ API-ის ცოდნამ მაძლევა გაცილებით მეტი ინფორმაცია, ვიდრე ადრე, როცა არც ვიცოდი, რომელ API-სთან მუშაობდით.
NPM-ზე რეგისტრირებული Node.js მოდული Node-Schedule საკმაოდ ხშირად გამოყენებადი API არის, ეს დიდად ფაქტორის გამო ხდება, რომ ის დაწერილია კარგ კოდთან ერთად, ხოლო მისი ავტორი კარგად იცავს მას, მაგრამ ყველაზე მოსალოდნელი მიზეზი, რის გამოც მას პოპულარობა აქვს, არის მისი დოკუმენტაცია, რომელიც შესანიშნავია NPM მოდულების მიხედვით, და ეს მნიშვნელოვანია იმიტომ, რომ მე შევძლებ ვხმარო ერთი მაგალითი, რომ ვცადო და ვაჩვენო, როგორ გამოიგზავნოს ღონისძიება სამუშაოს ბოლოს, რომელიც რიგში დებს ფუნქციას, რომელიც შეუძლია შეასრულოს ძიების ოპერაციები, რომელთა გაკეთებასაც ითხოვთ. node-schedule-ის დოკუმენტაცია შეგიძლიათ იპოვოთ პროგრამის რეგისტრში. როდესაც პირველად გახსნით დოკუმენტაციას, ნახავთ, რომ ის მოგცემთ რამდენიმე ძალიან კარგ მაგალითს. პირველი რამდენიმე მაგალითი, რაც იმ გვერდზე ხედავთ, ძირითადად ერთსა და იმავე საქმეს აკეთებს, განსხვავება მხოლოდ სინტაქსშია, რომელსაც ისინი იყენებენ. სხვაგვარად რომ ვთქვათ, შეგიძლიათ შეასრულოთ ფუნქცია კონკრეტულ დათარიღებულ დროს, ნებისმიერი ამ მაგალითებში ნახული დათარიღის ფორმატის/სინტაქსის გამოყენებით. საბოლოო ჯამში, ისინი ყველა საკმაოდ სტანდარტულია, მაგრამ მე გაჩვენებთ, როგორ გააკეთოთ ეს მეორე მაგალითის გამოყენებით, რომელიც იყენებს Date() ობიექტს, და ყველას (ვინც ოდესმე დაწერილა JavaScript-ს) ესმოდეს, რა არის Date() ობიექტი და როგორ გამოიყენება.
const schedule = require('node-schedule');
const date = new Date(2021, 5, 1, 13, 45, 0);
// ^Yr ^Mo ^Dy ^Hr ^min ^sec
const EventEmitter = require('events');
class Ee extends EventEmitter {}
const jobStatus = new Ee();
jobStatus.on('finished', () => {
console.log('JOB FINISHED');
// Preform your DB Operations here (in your case: delete job from database)
});
const job = schedule.scheduleJob(date, function(){
// Execute Your Jobs code Here
jobStatus.emit('finished'); // Emit your job done emitter when you are done.
});
გაიგოს:
საზოგადოებრივად, რაც ზემოთ მოცემული
new Date()ობიექტი ამბობს, ესაა:- თქვენ გსურთ თქვენი ფუნქცია შესრულდეს 2021 წლის 1 ივნისს, 13:30-ზე.
- გახსოვდეს, რომ JS Date ობიექტში
0=იანვარიდა23:59=11:59pm
ახლა გავამრთელოთ EventEmitter-ის ნაწილი:
ხაზი
const EventEmitter=require('events');არის Node ბიბლიოთეკა, რომელიც განვითარებისთათვის უზრუნველყოფსV8 Event Loop-ზე წვდომას (ეს სრულად ახსნად თემაა, რომელიც აქ არ განვიხილები), მე ვივარაუდებ, რომ იცით, რა არის event loop, თუ არ იცით, შეგიძლიათ მოძებნოთ. მოკლედ რომ ვთქვათ, ეს საშუალებას მოგვცემს გამოვიყენოთevent emitters, რომლების შესახებ შემდგომ ვილაპარაკებ.
class MyEmitter extends EventEmitter {}არის ერთ-ერთი მცირე რაოდენობის სხვადასხვა გზებიდან, რომლითაც შეგიძლიათ წაიწეროთ 'ახალი მოვლენების გამომცემელის ინსტანციის განხორციელება', ესაა ის, როგორ აჩვენებს ოფიციალური node დოკუმენტაცია, ამიტომ მე ასე წარმოგიდგენთ, მაგრამ ფაქტობრივად მე ასე არ ვაკეთებ. მე ვხმარობდი node დოკუმენტაციის გზას, ამიტომ შეგიძლიათ მიუთითოთ ამ გვერდზე თუ გინდათ, ეს ძალიან სასარგებლოა თქვენი სიტუაციისთვისNode.js მოვლენების გამომცემლების დოკუმენტაციის გვერდი
jobStatusკონსტანტა არისEeკლასის ახალი შექმნილი მაგალითი და მისი გამოყენება შეიძლება თქვენი სამუშაოს სტატუსის გამოშვებისათვის ნებისმიერ დროს სამუშაოს შესრულების განმავლობაში. (დაიმახსოვრე, ეს კოდი სრულიად ასინქრონულია.)თუ ზოგი ნივთის წერის ორდერი გაუგებრი ჩანს, ეს იმიტომ არის, რომ ეს კოდი ასინქრონულია. მოვლენები მუშაობენ ასინქრონულად.
გამოძებნეთ ეს მაგალითი, თუ პრობლემა გექნებათ, შეგიძლიათ მითხრათ. თქვენ უნდა განათავსოთ თქვენი JS სკრიპტი, რომელზეც მუშაობთ, თუმცა დაიმახსოვრეთ, ეს თქვენი პრობლემა არის, არა ჩემი, და შეამჩნიოთ, რამდენი გავწერე ამ საკითხზე და რამდენი დაწერეთ თქვენ. არის ბევრი რამ, რაც შეგიძლიათ დაამატოთ, რათა დაგვეხმაროთ მე (ან სხვა დეველოპერებს) დაგეხმაროთ.
პასუხი #2
მე მქონდა ისავე კითხვა, რაც შენ, რადგან ჩემს განრიგლებსაც აქვს მონაცემთა ბაზა.
დე გამოამოწმოთ, როდის მოხდება უკანასკნელი სამუშაოს შესრულება თქვენს კოდთან შესაბამისობაში, არის:
const job = schedule.scheduleJob(
{
start: scheduledJob.startTime,
end: scheduledJob.endTime,
rule: cronExp,
},
() => {
this.jobService.send(scheduledJob);
console.log("sent notification");
//As there are not more next invocations, it means this invocation is the last one
if (this.nextInvocation() === null) {
//here you can code whatever you need to do in the last invocation
}
}
);
დოკუმენტაცია: https://www.npmjs.com/package/node-schedule
