2017-03-19 27 views
0

過去一小時,我一直在爲此而苦苦掙扎。我無法讓它工作。在我的傳奇中,我有一個簡單的調用來從本地mongo數據庫獲取一些數據以作爲本機響應(https://github.com/smartdemocracy/react-native-local-mongodb),然後使用put()分派它。從原生MongoDB中獲取數據時,Redux saga API調用返回undefined?

let day = yield call(getDay, payload.day.date); 
yield put({ type: 'UPDATE_DAY', payload:{day:payload.day,index:payload.index,} }) 

這是API調用我做:

return db.findOne({ _id: date }, function (err, doc) { 
    return doc; 
}); 

這是我的理解是,調用函數需要返回的承諾,但我甚至不知道我有什麼是真正的一個。

回答

0

所以,你有你的傳奇故事是這樣的:

let day = yield call(getDay, payload.day.date); 
 
yield put({ type: 'UPDATE_DAY', payload:{day:payload.day,index:payload.index,} })

然後,我們將創建一個函數getDay這可能是像

const getDay = (date) => { 
 
    return new Promise((resolve, reject) => { 
 
    db.findOne({ _id: date , function (err, doc) { 
 
     if(err) reject(err) 
 
     else resolve(doc) 
 
    }) 
 
    } 
 
}

正如您所看到的,我們只是將函數包裝在Promise中,然後使用resolve/reject來獲得yield調用的結果。

爲了記錄在案,你應該換你的收益率在try/catch,並在情況下,拒絕被觸發,將運行catch部分

+0

你是保護我的朋友的生活。我很遺憾沒有早點提問。謝謝!!! –