2015-11-05 90 views
1

我猜測,有不同的方式來構建我的代碼,但這裏是我目前正在嘗試的。如何解決在rxjs中的返回對象內的承諾

'lastSavedPostDate'返回一個承諾。

如何在下次操作之前將'lastSavedPostDate'解析爲一個值?

var source = Observable.fromPromise(facebookPages) 
 
       .concatMap(page => page) 
 
       .map(page => ({ rid: getRid(page), pageId: page.id })) 
 
       .map(obj => { 
 
        return { 
 
        rid: obj.rid, 
 
        id: obj.pageId, 
 
        lastDate: lastSavedPostDate(obj.rid) 
 
        } 
 
       })

如果我控制檯日誌我的結果,我得到的東西回來這樣的。取而代之的

var source = Observable.fromPromise(facebookPages) 
     .concatMap(page => page) 
     .map(page => ({ rid: getRid(page), pageId: page.id })) 
     .map(obj => { 
      return { 
      rid: obj.rid, 
      id: obj.pageId, 
      lastDate: lastSavedPostDate(obj.rid) 
      } 
     }) 

{ rid: '#13:0', pageId: '18862642', lastSavedPostDate: Promise { _bitField: 131072, _fulfillmentHandler0: undefined, _rejectionHandler0: undefined, _progressHandler0: undefined, _promise0: undefined, _receiver0: undefined, _settledValue: undefined, etc... } }

回答

1

你應該使用

var source = Observable.fromPromise(facebookPages) 
      .concatMap(page => page) 
      .map(page => ({ rid: getRid(page), pageId: page.id })) 
      .flatMap(obj => lastSavedPostDate(obj.rid), (obj, p) => ({rid: obj.rid, id: obj.pageId, lastDate: p})) 
+0

你能解釋一下我這個功能'的obj => lastSavedPostDate(obj.rid),(OBJ,P)= >({rid:obj.rid,id:obj.pageId,lastDate:p})'請嗎? – giankotarola