जब कोई वादे की श्रृंखला में देरी हो सकती है तो एक वादे में देरी कैसे करें? मुझे इसकी आवश्यकता है क्योंकि मैं स्क्रिप्ट के साथ जाने से पहले एक सीएसएस एनीमेशन पूरा करने के लिए इंतजार करना चाहता हूं।फ़ंक्शन
फ़ंक्शन का उद्देश्य एक दृश्य खोलना है। यदि दृश्य पहले से खुला नहीं है, तो इसे खोलें (कक्षा को बदलकर), सीएसएस एनीमेशन के लिए प्रतीक्षा करें, आगे बढ़ें। यदि दृश्य पहले से खुला है, तो कुछ भी नहीं करें और आगे बढ़ें।
मैं इस तरह समारोह कॉल करना चाहते हैं:
$scope.openView(viewId).then(function() {
$scope.openAnotherView(anotherViewId);
});
/** Function to open some view **/
$scope.openView = function (viewId) {
function timeout(delay) {
return new Promise(function(resolve, reject) {
$timeout(resolve, delay);
});
}
// Check if view is already open
if ($scope.viewId != viewId) {
$scope.viewId = viewId;
// get data from ajaxcall (also a promise)
return MyService.getData(viewId).then(function(data) {
// add data to view
// change class to open view
// this is working ok!
}).then(function() {
return timeout(30000 /* some large number (testing purpose) */)
});
} else {
// view is already open, so return here we don't have to wait
// return empty promise, with no timeout
return new Promise(function(resolve, reject) {
resolve()
});
}
}
इस कोड काम करता है (यह एक कोणीय नियंत्रक के भीतर एक समारोह है), लेकिन देरी से काम नहीं कर रहा है। क्या मेरा दृष्टिकोण ठीक है? मुझे यहां क्या समझ नहीं आ रहा है?
संपादित करें 1: @sdgluck से सुझाव के साथ कोड में सुधार
संपादित 2:
मुख्य प्रश्न एक स्पष्ट करने के लिए: मुख्य प्रश्न में से कुछ स्पष्टीकरण थोड़ा और: क्या मैं इस कोड का उपयोग अपने कोड में कर सकता हूं?
// code doesnt know wheter to wait or not
// can the Promise do this?
openView().then(function() {
openAnotherView();
}
परिणाम 1:
ब्राउज़र openView()
फोन करेगा लेकिन जब से यह पहले से खुला है यह सिर्फ openAnotherView()
तुरंत (कोई देरी) कॉल करेंगे।
परिणाम 2:
दृश्य खुला, तो openView()
यह खुल जाएगा, तो एक देरी (? या के रूप में @Dominic टोबियास बताते हैं, एक eventlister जोड़ें) तो openAnotherView()
कुछ विलंब के बाद फोन नहीं है।
किसी भी मदद के लिए धन्यवाद!
संपादित 3: समस्या के साथ एक बेला जोड़ा http://jsfiddle.net/C3TVg/60/
मुझे लगता है कि आप इस गलत तरीके से जा रहे हैं। ऐसा लगता है कि आप यह जानना चाहेंगे कि एनीमेशन [इस] (https://davidwalsh.name/css-animation-callback) की तरह पूरा हो गया है या नहीं। –