मुझे पता है कि एक एसिंक्रोनस विधि की प्रतीक्षा बेवकूफ है, one should use callbacks instead। लेकिन क्या होगा यदि कोई तृतीय पक्ष एपीआई आपको तुल्यकालिक होने के लिए मजबूर करता है?एसिंक्रोनस विधि के कॉलबैक रिटर्न वैल्यू के लिए कैसे प्रतीक्षा करें?
मैं क्रोम एक्सटेंशन विकसित कर रहा हूं जो उपयोगकर्ता को उन वेबसाइटों पर जाने से रोक देगा जो पहले से ही किसी अन्य टैब में खुल चुके हैं। मुझे मूल रूप से खुले टैब में यूआरएल के आधार पर अनुरोध रद्द करने की आवश्यकता है। मैं chrome.webRequest.onBeforeRequest
इस तरह उपयोग करना चाहते हैं:
function onBeforeRequest(details) {
var websiteAlreadyOpenInOtherTab;
// Here i want to set `websiteAlreadyOpenInOtherTab` by using the `chrome.tabs`
// API. It's asynchronous though and that's my problem. I cant return a value
// from an asynchronous method call.
if (websiteAlreadyOpenInOtherTab) {
return { cancel: true };
}
}
chrome.webRequest.onBeforeRequest.addListener(
onBeforeRequest,
{ urls: ['<all_urls>'], types: ['main_frame'] },
['blocking']);
उम्मीद है कि आप उपरोक्त कोड में मेरी दुविधा को देखते हैं। मुझे एसिंक्रोनस विधि कॉल के परिणाम के आधार पर एक ऑब्जेक्ट वापस करने की आवश्यकता है। क्या यह हासिल करना संभव है?
नहीं, यह नहीं :-(है – Bergi
क्या आप सभी 'chrome.tabs' परिवर्तनों को नहीं सुन सकते हैं और 'वेबसाइट पहले से ही ओपनइनऑथटैब' में पहले से ही सही मान है जब 'onBeforeRequest' कहा जाता है? – Bergi
मुझे लगता है कि आप दृष्टिकोण हैं समस्या गलत तरीके से। सबसे पहले, अगर चीजों को असीमित होने की आवश्यकता है, तो सिंक्रोनस प्रतिक्रिया की आवश्यकता के बजाय, मॉडल के भीतर काम करें और एक एसिंक्रोनस कॉलबैक का उपयोग करें जिसमें आप तय करते हैं कि टैब खुला नहीं होना चाहिए, तो आप इसे बंद कर दें। टैब को बंद करने के लिए एक अलग एपीआई फ़ंक्शन है, आपको केवल पहले से ही झूठी वापसी की आवश्यकता नहीं है ... – davin