如何将功能暂停2秒钟?

问题描述

你好,我有以下代码:

         function updateData(){
            
            return firebase.database().ref(varurl3).child('UserCount/count').once('value').then(function(snapshot) {
            var username = snapshot.val();
            var username2 = username+1; 
                
            return firebase.database().ref(varurl3).child('Users').child(username2).child('User').once('value').then(function(snapshot) {
            var username3 = snapshot.val();
            
            if(username3!= null){
                //Here i want to stop my function for 2 seconds
            }
            });
            
            });

        }

        timeupdater = setInterval(updateData,100);

当它进入if循环时,我想暂停我的函数。我尝试过睡眠,但该功能始终继续运行异步。就我而言,有没有一种方法可以将函数暂停2秒钟,以使timupdater不会在循环底部再次调用它?我将不胜感激。

解决方法

由于Firebase已经返回了承诺,因此请一路使用承诺。使用asyncawait可以简化为:

// Utility function to return a promise that resolves after a given delay
const delay = ms => new Promise(resolve => setTimeout(resolve,ms));

async function updateData(){
    let ref = firebase.database().ref(varurl3);
    let snapshot = await ref.child('UserCount/count').once('value');
    var username = snapshot.val();
    var username2 = username+1; 
    snapshot = await ref.child('Users').child(username2).child('User').once('value');
    var username3 = snapshot.val();    
    // resolve a promise after 2 seconds
    if (username3 != null) await delay(2000);
}

(async function looper() {
    while (true) { // forever
        await updateData();
        await delay(100); // this was the setInterval delay
    }
})(); // execute looper

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...