2017-02-15 104 views
-1

最近我聽到'承諾',並試圖瞭解它是如何工作,並說... 它運作不好。承諾的例子,然後

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') 
 
     });

寫入1-4999但從來沒有寫入「完成」或「錯誤」。我怎麼可以把它寫「然後」的條款?

您的善意回覆,將不勝感激。

+1

'無極(函數(解析,拒絕){',而不是'承諾(函數(){'和的身體promise函數在循環(或某處)之後放置了一個'resolve();' – Xufox

+0

這兩個匿名函數是不是剛剛定義的,並且從未真正執行過? – hauron

+0

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Promise –

回答

1

承諾得到兩個參數:決心&拒絕將作爲功能被作爲在。然後()& .catch()定義的執行。因此,爲了能夠獲取打印「完成」或「錯誤」你應該做這樣的事情:

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') 
 
    });

您需要解決,拒絕回調。在你的代碼中你的Promise總是處於未決狀態。

+0

是的,現在我意識到這是我錯過了它。 謝謝你的回答。 –

0

喜歡的東西... https://www.promisejs.org/patterns/

例:

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

謝謝你親切的回答..現在我想我說得對:) –