ओओपी ईएस 5-6 को डिजाइन करते समय, जहां मैं ईएस 6 कार्यों के साथ प्रोटोटाइप को जोड़ता हूं। इलेक्ट्रॉनजेएस में सब कुछ चल रहा है, मुझे एक नया संस्करण नहीं चाहिए जो पूरी तरह से ईएस 7 का भी समर्थन करता है, इसलिए उदाहरण के लिए "./cesta" से आयात {trida} की परिभाषा को हल किया जाना चाहिए ('./ पथ')। मेरी समस्या है, लेकिन यह प्रॉमिस में है।

अगर मैं ऑब्जेक्ट प्रोग्राम करना चाहता हूं, तो मैं चाहता हूं कि प्रत्येक ऑब्जेक्ट उसके पास हो और परिणाम को प्रोग्राम की मुख्य शाखा में पास करे, जिसमें पूरी प्रक्रिया का कॉलम होता है - ऑब्जेक्ट सूची - सामग्री। यदि फन सेटटाइमआउट () दर्ज करें, तो आपको यहां प्रॉमिस का उपयोग करने की आवश्यकता है, जो फ़ंक्शन के निष्पादित होने तक प्रतीक्षा करता है और किसी अन्य ऑब्जेक्ट को कॉल करना जारी रखता है।

let importing = function(){
	this.name = "boot";
}

importing.prototype.start = function(resolve){
    this.resolve = resolve;
    setTimeout(this.test.bind(this),1000);
	console.log('start -------->');
}

importing.prototype.test = function(){
    this.resolve('Test');
	console.log('Test -------->');
}


importing.prototype.end = function(resolve){ 
	console.log('end -------->');
    this.resolve = resolve;
    this.resolve('end');
}

let geko;
let scan = new importing();
Promise.resolve(geko)
	.then((geko) => new Promise(scan.start.bind(scan)))
	.then((geko) => new Promise(scan.end.bind(scan)))
	.catch(geko => {
	    console.log('Error message: ',geko)
	})

यहाँ समस्या है, मैं नहीं चाहता कि सुविधाओं को प्रोटोटाइप कार्यों में घोंसला बनाया जाए, मैं हर वस्तु को, अच्छी तरह से, स्पष्ट रूप से कॉल करना चाहता हूं। किसी भी पुस्तक की तरह, इसकी अध्याय सामग्री है, और फिर अध्याय स्वयं और मैं चाहता हूं कि मैंने जो प्रोग्राम किया है उसमें एक त्वरित प्रविष्टि हो और यह नहीं देखा कि एक सप्ताह के बाद कितना माउस लिया गया था। लेकिन इस ऑपरेशन के लिए, प्रॉमिस के अलावा, मुझे बाइंड () फ़ंक्शन का भी उपयोग करना होगा क्योंकि:

importing.prototype.start = function(){
// here this acts as a window object not as importing
// why I have this object called scan.start.bind (scan)
// and here again in setTimeout i have to bind (this) to get it in this.test
// could access this importing - scan object
  setTimeout(this.test.bind(this),300);
}

आपको कोई बेहतर तरीका मिलेगा ??

0
Dalibor Adamec 3 जिंदा 2018, 16:39
उह, ऐसा नहीं है कि आप वादों का उपयोग बिल्कुल भी नहीं करेंगे।
 – 
Bergi
3 जिंदा 2018, 16:46
तो यह उदाहरण काम करता है और मुझे जो वादा चाहिए, लेकिन मुझे अभी भी लगता है कि यह म्यान है। या आपके पास कोई बेहतर विचार है? क्योंकि इस पेज के अनुसार developer.mozilla.org/en -यूएस/डॉक्स/वेब/जावास्क्रिप्ट/संदर्भ/… मैंने इसे कम से कम वर्णों में काटा।
 – 
Dalibor Adamec
3 जिंदा 2018, 21:28
मुझे नहीं लगता कि आपका उदाहरण कोड काम करता है। शायद अपना वास्तविक पूरा कोड पोस्ट करें।
 – 
Bergi
3 जिंदा 2018, 21:53
1
ठीक है, इसलिए मैंने इसे संशोधित किया ताकि आप इसे जाने दें।ठीक है, इसलिए मैंने इसे संशोधित किया ताकि आप इसे जाने दें। नीचे देखें
 – 
Dalibor Adamec
3 जिंदा 2018, 22:15
कृपया अपडेट को उत्तर के रूप में पोस्ट करने के बजाय अपने प्रश्न को संपादित करें करें।
 – 
Bergi
3 जिंदा 2018, 22:34

2 जवाब

आपको विधियों को new Promise कंस्ट्रक्टर के तर्क के रूप में पास नहीं करना चाहिए। यदि विधि अतुल्यकालिक है, तो उसे अपने आप एक वादा वापस करना चाहिए; यदि यह अतुल्यकालिक नहीं है तो आपको किसी भी वादे का उपयोग नहीं करना चाहिए।

function importing(){
    this.name = "boot";
}

importing.prototype.start = function() {
    console.log('start -------->');
    return new Promise(resolve => {
        setTimeout(resolve, 1000); // put the native async call in here, and nothing else!
    }).then(() =>
        this.test()
    );
};

importing.prototype.test = function() {
    console.log('Test -------->');
    return 'Test';
};

importing.prototype.end = function() { 
    console.log('end -------->');
    return 'end';
}

const scan = new importing();
scan.start().then(() => scan.end()).catch(geko => {
    console.log('Error message: ',geko)
});
0
Bergi 4 जिंदा 2018, 00:37
मैंने अभी आपके और मेरे समाधान के लिए एक प्रदर्शन परीक्षण की कोशिश की है, और ऐसा लगता है कि मेरा समाधान थोड़ा तेज है। वैसे भी, आपकी प्रतिक्रिया के लिए बहुत-बहुत धन्यवाद। मैं इसकी सराहना करता हूं। भवदीय, डालीबोर
 – 
Dalibor Adamec
4 जिंदा 2018, 14:12
मुझे ऐसा संदेह है। सारा समय 1s टाइमआउट में व्यतीत होता है, शेष नगण्य है।
 – 
Bergi
4 जिंदा 2018, 15:56
हाँ, आप सही कह रहे हैं, बहुत कम है, मैंने इसे सरल बनाया है इसलिए मुझे प्रत्येक वस्तु में इसे जोड़ने की आवश्यकता नहीं है।
 – 
Dalibor Adamec
4 जिंदा 2018, 17:34

यदि पूरी परियोजना इस प्रकार बनाई गई थी:

return new Promise(resolve => {
        setTimeout(resolve, 1000);
    }).then(() =>
        this.test()
    );

मुझे क्लासिक JS प्रक्रिया, यानी फंक्शन्स में फंक्शन के नेस्टिंग से बहुत कुछ लेना-देना नहीं होगा। यही मैं बचना चाहता हूं। मुझे सामग्री चाहिए, एक रूपरेखा, जब मैं इसे एक वर्ष के लिए देखता हूं और मैं बग को हल करने जा रहा हूं, मुझे पता चल जाएगा कि कहां से शुरू करना है और कहां गलतियां हो रही हैं।

let importing = function(){
	this.name = "boot";
}

importing.prototype.start = function(resolve){
	console.log('Start');
    this.resolve = resolve;
    setTimeout(this.test.bind(this),1000);
}

importing.prototype.test = function(){
	console.log('Test');
    this.resolve('Test');
}

importing.prototype.end = function(resolve){
	console.log('End');
    resolve('end');
}

let scan = new importing();
let promise = function(arg){
    return new Promise((resolve, reject)=>{ // The same: new Promise(scan[arg].bind(scan))
		return scan[arg].bind(scan)(resolve)
	});
}

// so I would imagine chaining. Few braces, simply
// In each called object, if possible, the minimum promissory note

Promise.resolve()
	.then(geko => promise('start'))
	.then(geko => promise('end'))
	.catch(geko => {
	    console.log('Error message: ',geko)
	})
0
Dalibor Adamec 4 जिंदा 2018, 11:47
मुझे नहीं पता कि आपका क्या मतलब है "क्लासिक JS प्रक्रिया, यानी फंक्शन में फंक्शन का नेस्टिंग "। और आप इससे क्यों बचना चाहेंगे?
 – 
Bergi
4 जिंदा 2018, 15:57
क्योंकि, जैसे कि पुस्तक की सामग्री एक त्वरित अवलोकन निर्धारित करती है कि यह क्या है, मैं भी अपने कोड में एक त्वरित प्रविष्टि करना चाहता हूं क्योंकि, मैं एक फुलस्टैक डेवलपर हूं और दुर्भाग्य से मैं एंगलटर 2+ या के साथ काम करते समय बहुत कुछ भूल जाता हूं। NodeJs और ElectroneJS। मैं एक स्वायत्त अनुप्रयोग पर काम कर रहा हूं जिसे लगातार अनुकूलित करना है, बनाए रखना बहुत कठिन है।
 – 
Dalibor Adamec
4 जिंदा 2018, 17:43