2017-06-01 12 views
2

firebaseのクラウド関数を作成しようとしていますが、遅延値に応じてユーザーを削除し、遅延数の後ろに挿入します。firebaseクラウド関数でjavascriptのsetTimeout関数を使用する方法

exports.delayqueue = functions.database.ref('/queues/{queueid}/members/{memberid}').onWrite(event => { 

var members = event.data.ref.parent; 
var user = event.data; 
var queueid = members.parent; 
var userid = event.params.memberid; 
var delayfor = user.child('delay').val(); 
var name = user.child('name').val(); 

if(delayfor != 0){ 
    members.child(event.params.memberid).remove(); 
    join(userid,queueid,delayfor,name); 
    return; 
}else{ 
return; 
} 
}); 

function join(userid,queueid,delayfor,name){ 
    setTimeout(function(){ 
    var ref = db.ref("queues/queueid/members/userid"); 
    ref.set({ 
    name: name, 
    timestamp: Date.now(), 
    delay : 0 
    }); 
    }, delayfor*1000); 
    }; 

しかし、誰かを助けることはできません。

答えて

4

あなたは約束であなたのsetTimeoutをラップする必要があります:のsetTimeout を待って過ごした時間は、関数の実行時間として請求しても機能のタイムアウトの対象とされていることを

exports.delayqueue = functions.database.ref('/queues/{queueid}/members/{memberid}').onWrite(event => { 
    var members = event.data.ref.parent; 
    var user = event.data; 
    var queueid = members.parent; 
    var userid = event.params.memberid; 
    var delayfor = user.child('delay').val(); 
    var name = user.child('name').val(); 

    if (delayfor !== 0){ 
    members.child(event.params.memberid).remove(); 
    return join(userid,queueid,delayfor,name); 
    } else { 
    return; 
    } 
}); 

function join(userid,queueid,delayfor,name){ 
    return new Promise((resolve, reject) => { 
    setTimeout(function(){ 
     var ref = db.ref("queues/queueid/members/userid"); 
     ref.set({ 
     name: name, 
     timestamp: Date.now(), 
     delay : 0 
     }).then(resolve, reject); 
    }, delayfor*1000); 
    }); 
}; 

注意。数秒しか遅れていないのであれば大丈夫かもしれませんが、遅延が数分になると予想される場合、この解決法は実行可能でもコスト効果がありません。

+0

遅延は分になると予想されます。彼らはそれのための任意のソリューションですか? – Emibrown

+0

cronジョブを作成して、定期的に関数を呼び出して、実行したはずのアクションを実行することができます。 App Engineの例については、[this repo](https://github.com/firebase/functions-cron)を参照してください。 –

関連する問題