2014-10-29 175 views
2

我有myPeople功能,即在它調用這樣使用藍鳥承諾

var myPeople = function(){ 
    var go; 
    return new Promise (function(resolve){ 
     User 
      .getPeople() 
      .then(function(allPeople){ 
       go = allPeople; 
       //console.log(go) 
       resolve(go); 
      }) 
     }) 
    return go; 
} 

一個承諾的功能,如果我登錄塊讓我的對象之內我去,但我不能讓它返回這個對象..

+1

你需要在返回的promise上使用'then'方法,而不僅僅是'getPeople'方法 – 2014-10-29 18:42:02

+0

有沒有辦法讓myPeople返回對象本身作爲'{.. ..}'我可以使用這種方式,我不必'myPeople()。然後(在這裏做一些事情);'? – goms 2014-10-29 18:49:26

+0

@goms不,沒有。這是因爲那樣就沒有辦法知道該方法實際上是在執行異步操作。 – 2014-10-29 19:12:50

回答

2

鏈的承諾,也 - 避免then(success, fail)反面模式:

var myPeople = function(){ 
    return User.getPeople() 
      .then(function(allPeople){ // 
       console.log(allPeople); 
       return allPeople.doSomething(); // filter or do whatever you need in 
               // order to get myPeople out of 
               // allPeople and return it 

      }); 
     }); 
} 

然後在外面:

myPeople.then(function(people){ 
    console.log(people); // this will log myPeople, which you returned in the `then` 
}); 
+0

Ben,我得到你說的,但在外面,想用myPeople返回的對象以及其他東西,這就是爲什麼我不需要將所有東西都嵌套在myPeople.then()之下。 – goms 2014-10-29 19:09:42

+0

@goms承諾使用函數執行異步操作_cannot_直接返回值。它必須承諾超過這個價值,你必須打開它。 – 2014-10-29 19:11:01

+0

您可能想要[閱讀此答案](http://stackoverflow.com/a/16825593/1348195)以獲取JS中的異步性。 – 2014-10-29 19:12:23