2017-02-15 1 views
-1

Kürzlich hörte ich "Versprechen" und versuchte zu lernen, wie es funktioniert und sagen ... es funktioniert nicht gut.Das Beispiel der Versprechen und dann

function example(){ 
 
     return new Promise(function(){ 
 
     var i=0; 
 
     while(i<5000){console.log(i);i++;} 
 
     }) 
 
    } 
 
      
 
    example() 
 
    .then(
 
     function(){ 
 
     console.log('done') 
 
     }, 
 
     function(){ 
 
     console.log('error') 
 
     });

es schreibt 1-4999 aber nie ‚fertig‘ oder ‚Fehler‘, schreibt .. wie kann ich es dann "-Klausel schreiben zu machen?

Ihre freundliche Antwort würde geschätzt werden.

+1

'Promise (function (Entschlossenheit, ablehnen) {' statt 'Promise (function() {' und im Körper des Versprochen Funktion setzen eine 'resolve();' nach der Schleife (oder irgendwo), im Grunde. – Xufox

+0

Sind nicht diese beiden anonymen Funktionen nur definiert und nie tatsächlich ausgeführt? – hauron

+0

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Referenz/Global_Objects/Versprechen –

Antwort

1

Promises erhält zwei Argumente: Entschluß & verwerfen, dass die Funktionen sein wird als das definiert, bei dem .then() & .catch() ausgeführt werden. So in der Lage sein, drucken Sie sich einfach die ‚Fertig‘ oder ‚Fehler‘ Sie sollten etwas tun:

function example(condition){ 
    return new Promise(function(resolve, reject){ 
    var i=0; 
    while(i<5000){console.log(i);i++;} 
    if(condition){ 
     resolve(); 
    } else { 
     reject(); 
    } 
    }) 
} 
example(true).then(function(){console.log('done')},function(){console.log('error')});//Prints 'done' 

example(false).then(function(){console.log('done')},function(){console.log('error')});//Prints 'error' 
0

function example() { 
 
    return new Promise(function(resolve,reject) { 
 
    var i = 0; 
 
    while (i < 5000) { 
 
     console.log(i); 
 
     i++; 
 
    } 
 
    resolve(i); 
 
    }) 
 
} 
 

 
example() 
 
    .then(
 
    function() { 
 
     console.log('done') 
 
    }, 
 
    function() { 
 
     console.log('error') 
 
    });

Sie lösen müssen, lehnen Rückrufe. In Ihrem Code bleibt Ihr Versprechen immer im Status "Ausstehend".

+0

Ja, jetzt habe ich festgestellt, dass ist, was ich verpasst habe. Vielen Dank für Ihre freundliche Antwort. –

0

So etwas wie ... https://www.promisejs.org/patterns/

Bsp .:

function example() { 

     return new Promise(function(resolve, reject){ 

     try{ 

      var i = 0; 

      while(i < 5000){ 

      console.log('proccess',i); 

      i++; 

      } 

      resolve(i);// an if, to resolve or reject... 

     } catch(error) { 

      reject(error); 

     } 

     }); 

    } 

    console.log('will call the promise'); 

    example().then(function(success){ 

     console.log('caller promise result', success); 

    }).catch(function(error){ 

     console.log('if some problem, catch',error.toString()); 

    }); 

    console.log('Here, will be before or after the promise resolves'); 
+0

Vielen Dank für Ihre freundliche Antwort .. Jetzt denke ich, dass ich es richtig gemacht habe :) –

Verwandte Themen