मैं es7 शैली async/प्रतीक्षा विधियों के साथ babeljs का उपयोग कर रहा हूँ। मेरे पास एक मुख्य स्क्रिप्ट है जो ऑब्जेक्ट की एक सरणी पर एसिंक विधि को कॉल करेगी जो सभी रिटर्न वादे करती है। मैं उन सभी के लिए प्रतीक्षा करने के लिए Promise.all() का उपयोग करता हूं, हालांकि, इन कार्यों में काफी समय लग सकता है और यदि वे सीमा से अधिक हो जाते हैं तो मैं उन सभी को निरस्त करना चाहता हूं, और कार्य उचित तरीके से संभालता है।एसिंक्रोनस कॉल को रोकने की क्षमता
क्या ऐसी कोई चीज़ पूरी करने के लिए वैसे भी है? वर्तमान में एकमात्र तरीका जिसे मैं सोच सकता हूं वह एक ऐसी प्रक्रिया को जन्म दे रहा है जो इन तरीकों को बुलाए जाने और उनके लिए सभी इंतजार करने का इंतजार कर रहा है, और यदि समय सीमा तक पहुंच जाती है, तो यह प्रक्रिया को मार सकती है और जो भी इसे संभालने की ज़रूरत होती है।
अद्यतन: मुख्य स्क्रिप्ट का इंतजार कर रहे इन तरीकों के बारे में कुछ स्पष्टीकरण ... वे लंबे समय तक संचालन (बाहरी सिस्टम को कॉल करना, फ़ाइलों को स्ट्रीम करना आदि) कर रहे हैं और एक भी क्रिया नहीं कर सकते स्वतंत्र रूप से रद्द कर दिया।
# अद्यतन 2: कुछ अपरीक्षित अर्द्ध छद्म कोड
class Foo1 {
async doSomething() {
// call some external system
// copy some files
// put those files somewhere else (s3)
}
}
class Foo2 {
async doSomething() {
// Do some long computations
// Update some systems
}
}
class FooHandler {
constructor() {
this.fooList = [];
}
async start() {
await Promise.all(this.fooList.map(async (foo) => {
return await foo.doSomething();
}));
}
}
let handler = new FooHandler();
handler.fooList.push(new Foo1());
handler.fooList.push(new Foo2());
// if this call takes too long because of slow connections, errors, whatever,
// abort start(), handle it in whatever meaningful way, and continue on.
await handler.start();
क्या आप अपना कोड पोस्ट कर सकते हैं? –
यह वास्तविक समस्या के बारे में एक उत्कृष्ट सवाल है, यह क्यों कम हो गया है? –
संबंधित: [EMCAScript6 (वेनिला जावास्क्रिप्ट) वादा श्रृंखला को कैसे रद्द करें] (http://stackoverflow.com/q/29478751/1048572) – Bergi