2011-07-20 17 views
5

एक जेक कार्य एक लंबे समय से चलने वाली प्रणाली कमांड निष्पादित करता है। एक और कार्य शुरू करने से पहले पूरी तरह से खत्म होने वाले पहले कार्य पर निर्भर करता है। 'Child_process' का 'exec' फ़ंक्शन सिस्टम कमांड को असीमित रूप से निष्पादित करता है, जिससे पहला कार्य पूरा होने से पहले दूसरे कार्य को शुरू करना संभव हो जाता है।नोड.जेएस और जेक - एक कार्य के भीतर सिंक्रनाइज़ सिस्टम सिस्टम को कैसे कॉल करें?

यह सुनिश्चित करने के लिए जेकफाइल लिखने का सबसे साफ तरीका क्या है कि दूसरे कार्य शुरू होने से पहले पहले कार्य में लंबे समय तक चलने वाला सिस्टम कमांड समाप्त हो जाता है?

मैंने पहले कार्य के अंत में एक डमी लूप में मतदान का उपयोग करने के बारे में सोचा है, लेकिन यह सिर्फ खराब गंध करता है। ऐसा लगता है कि एक बेहतर तरीका होना चाहिए। मैंने this SO question देखा है, लेकिन यह मेरे प्रश्न को काफी संबोधित नहीं करता है।

var exec = require('child_process').exec; 

desc('first task'); 
task('first', [], function(params) { 
    exec('long running system command'); 
}); 

desc('second task'); 
task('second', ['first'], function(params) { 
    // do something dependent on the completion of 'first' task 
}); 

उत्तर

2

मैं फिर से फिर से पढाना Matthew Eernisse's post द्वारा अपने ही सवाल का जवाब मिल गया।

var exec = require('child_process').exec; 

desc('first task'); 
task('first', [], function(params) { 
    exec('long running system command', function() { 
    complete(); 
    }); 
}, true); // this prevents task from exiting until complete() is called 

desc('second task'); 
task('second', ['first'], function(params) { 
    // do something dependent on the completion of 'first' task 
}); 
+1

क्यों न केवल पहला कार्य सिग्नल उत्सर्जित करता है जब यह किया जाता है, और उस सिग्नल के श्रोता दूसरे कार्य को जन्म देते हैं? – Keith

1
बस भविष्य में संदर्भ के

, मैं कोई अन्य निर्भरता के साथ एक तुल्यकालिक कार्यकारी मॉड्यूल है: सोच यह कैसे करना है उन लोगों के लिए।

उदाहरण:

var allsync = require("allsync"); 
allsync.exec("find /", function(data){ 
    process.stdout.write(data); 
}); 
console.log("Done!"); 

ऊपर exampale में, Done केवल के बाद find प्रक्रिया मौजूद है छपा है। exec फ़ंक्शन अनिवार्य रूप से पूर्ण होने तक ब्लॉक करता है।

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