2017-02-15 108 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

谢谢你亲切的回答..现在我想我说得对:) –