bu kötü bir fikir. Sana nedenini söyleyeyim. Tarayıcıda JavaScript temelde tek bir dişli canavardır. Bunu düşünmeye gel, Node.js'de de tek iş parçacığı var. Yani, uzaktan isteğin başarılı olmasını veya başarısız olmasını beklediğiniz noktada "geri dönmemek" için yaptığınız her şey, büyük olasılıkla isteğin ardından kodun yürütülmesini geciktirmek için bir çeşit döngü içerecektir. Böyle bir şey:
var semaphore = false;
var superImportantInfo = null;
// Make a remote request.
$http.get('some wonderful URL for a service').then(function (results) {
superImportantInfo = results;
semaphore = true;
});
while (!semaphore) {
// We're just waiting.
}
// Code we're trying to avoid running until we know the results of the URL call.
console.log('The thing I want for lunch is... " + superImportantInfo);
Ama bir tarayıcıda denemek ve çağrı uzun zaman alırsa, tarayıcı JavaScript kodu bir döngü içinde sıkışmış olduğunu düşünüyorum ve kullanıcının yüzü veren bir ileti açılır Kullanıcı kodunuzu durdurma şansı. böylece gibi JavaScript nedenle yapılar it:
// Make a remote request.
$http.get('some wonderful URL for a service').then(function (results) {
// Code we're trying to avoid running until we know the results of the URL call.
console.log('The thing I want for lunch is... " + results);
});
// Continue on with other code which does not need the super important info or
// simply end our JavaScript altogether. The code inside the callback will be
// executed later.
geri aramasında kodu bir olayın her servis çağrı döner tetiklediği olacağını olmanın fikir. Çünkü olay, Javascript'in nasıl beğendiğini gösteriyor. JavaScript'teki zamanlayıcılar olaylardır, kullanıcı eylemleri olaylardır, veri üretme olayları göndermek ve almak için HTTP/HTTPS çağrıları da vardır. Ve kodunuzun geldiklerinde bu olaylara yanıt verecek şekilde yapılandırılması bekleniyor.
Kodunuzu, uzak hizmet çağrısı geri geldiği zamana kadar uzaktan Erişim yanlış olduğunu düşünecek şekilde yapılandıramaz ve belki de bunun gerçekten de doğru olduğunu öğrenir mi? AngularJS kodunda bunu her zaman yaparım, çünkü kullanıcıya göstermem gereken en son izinler grubunun ne olduğunu bilmiyorum çünkü bunları henüz almadım ya da görüntülenen tüm verileri almadım. önce sayfa. Gerçek veriler geri gelene kadar gösterilen varsayılan değerlerim var ve sayfa yeni verilere dayanarak yeni formuna geçiyor. AngularJS'nin iki yönlü bağlanması bunu gerçekten çok kolaylaştırıyor.
var globalRequestSync = function (pUrl, pVerbo, pCallBack) {
httpRequest = new XMLHttpRequest();
httpRequest.onreadystatechange = function() {
if (httpRequest.readyState == 4 && httpRequest.status == 200) {
pCallBack(httpRequest.responseText);
}
}
httpRequest.open(pVerbo, pUrl, false);
httpRequest.send(null);
};
Evet, çok iyi puanlar veriyorsunuz. Kodumu kesinlikle böyle yapılandırabilirim ve çok zor olmamalı. Bunu yapmanın bir yolu olsaydı daha çok merak ettim, ama benimle bunun yararından bahsetmiştin. Erişime izin vermeme fikrini beğenirim ve iki yönlü bağlayıcılığın geri kalanına bakmasına izin veririm. Teşekkürler. –
İlk örnekte, 'while' ifadesinin durumunun asla doğru olmayacağını düşünmüyorum. Bunun nedeni, eşzamanlı olarak çalışacak ve HTTP isteğini hiç olmamış gibi engelleyecektir. – mightyiam
Bazı durumlarda gerçekten beklemek istersiniz, bence asıl soru buydu. Bu cevap gerçekten buna cevap vermiyor. –