[英]How do I chain Promises with interval-promise Node.js module?
我正在使用“間隔承諾”(此處為 github 存儲庫)模塊來讀取 Firebase 實時數據庫節點中的值以進行持續登錄。
這個想法是從可能尚不存在的實時數據庫節點讀取“狀態”鍵,然后重試直到它有一個值。
const tryGetAuthStatus = (user) =>
new Promise((resolve, reject) => {
var login_node = user.child(provider);
if (login_node.exists()) {
resolve(login_node.val().status)
}
})
ref.child(uuid).once('value') //Returns a promise
.then((user) =>
intervalPromise(
async (iteration, stop) => await tryGetAuthStatus(user), //Returns a promise
attempts_pause,
{ iterations: attempts_max, stopOnError: true }
)
)
.then((result) => console.log(result)) //undefined
如您所見,我正在返回 intervalPromise Promise 以繼續 promise 鏈。 當從 firebaseTryGetAuth 返回的 promise 解析時,它返回正確的結果(例如“授權”),但鏈中的最后一個“then”沒有從返回的 intervalPromise 中得到結果。
我怎樣才能傳播結果?
interval()
返回的 promise 不會從您自己的異步操作中解析/傳遞一個長值。 它只是做一個resolve()
調用來結束它自己的 promise
if (currentIteration === settings.iterations || stopRequested) { rootPromiseResolve() return }
由於這可以做幾件事:
then()
回調中使用它interval()
的 function 檢查狀態//only use in then() callback
//outside use may result in use before set
let authStatus = null;
let authCheck = (user)=>{
return async (iteration, stop) => {
let status = await tryGetAuthStatus(user)
//set variable for use in then()
authStatus=status;
//or check status now and do so some action
//instead of in some later then()
if(status == whatyouwant){
someAction()
//call stop() since no reason to continue
//the async loop
stop();
}
};
};
ref.child(uuid).once('value')
.then((user) =>
intervalPromise(
authCheck(user),
attempts_pause,
{ iterations: attempts_max, stopOnError: true }
)
)
//if you want to go the set outer scope variable route
.then(() =>{
if(authStatus == whatever){
doSomeAction();
}
})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.