2017-04-06 41 views
-1

我需要在500毫秒內完成一些查詢。如何使功能在JavaScript中的指定時間內不會結束

我不想浪費這500毫秒或者,像延緩一切都像在這裏:

someFunction(someService) { 
    setTimeout(() => { 
    getDataFromBackend().then(data => { 
     someService.makeAnAction(); 
    }); 
    }, 500); 
} 

如何開始從後端獲取數據一次,但做一些事情不是太很快與該數據?

+2

商店getDataFromBackend的'的返回值()'在超時以外的變量,然後把'.then'超時內調用。 – 4castle

+0

這個問題有什麼問題? –

+0

@ 4castle對我來說不是那麼明顯,謝謝。我會將其標記爲答案。 –

回答

2

做一個函數來獲得解決了所需的時間承諾:

const delay = ms => new Promise(resolve => { 
    setTimeout(resolve, ms); 
}); 

等待它和你的操作來完成:

someFunction(someService) { 
    return Promise.all([getDataFromBackend(), delay(500)]).then(([data]) => { 
    someService.makeAnAction(); 
    }); 
} 

替代不破壞結構,與藍鳥:

someFunction(someService) { 
    const dataGet = getDataFromBackend(); 

    return delay(500).return(dataGet).then(data => { 
    someService.makeAnAction(); 
    }); 
} 

潛在誤導性等同於上述內容:

someFunction(someService) { 
    return delay(500) 
    .return(getDataFromBackend()) 
    .then(data => { 
     someService.makeAnAction(); 
    }); 
} 

異步/等待:

async someFunction(someService) { 
    const dataGet = getDataFromBackend(); 
    await delay(500); 
    const data = await dataGet; 

    someService.makeAnAction(); 
} 
相關問題