<p>我目前正在處理包含大量資料(5000)的資料表。為了能夠以進度載入數據,我新增了一個進度條,用於說明每個時間單位已載入的資料量。但下面的程式碼不再起作用。</p>
<p><br />></p>
<pre class="brush:js;toolbar:false;">讓handleProgressBar = (id, value, Total) => {
讓百分比 = Math.round((值 / 總計) * 10000) / 100;
$(id " > div").html(百分比 "%");
$(id " > div").css('width', 百分比 "%");
}
讓表 = $('#data').DataTable();
fetch('https://jsonplaceholder.typicode.com/photos')
.then((res) => res.json())
.then((res) => {
res.forEach(async(數據,索引)=>{
表.行.加([
數據.id,
數據.albumId,
數據.標題,
資料位址
]);
handleProgressBar('#progress-bar', 索引 1, res.length);
等待新的 Promise(r => setTimeout(r, 1)); // 休眠1毫秒
});
表格.draw();
});</pre>
.progress-bar-striped {
溢出:隱藏;
高度:20px;
下邊距:20px;
背景顏色:#f5f5f5;
邊框半徑:4px;
-webkit-box-shadow:插入 0 1px 2px rgba(0, 0, 0, 0.1);
-moz-box-shadow:插入 0 1px 2px rgba(0, 0, 0, 0.1);
框陰影:插入 0 1px 2px rgba(0, 0, 0, 0.1);
}
.progress-bar-striped>div {
背景影像: 線性漸層(45deg, rgba(255, 255, 255, 0.15) 25%, 透明25%, 透明50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 55, 55, 55, 25, 5 0.15) 75%, 透明75%, 透明);
背景大小:40px 40px;
向左飄浮;
寬度:0%;
高度:100%;
字體大小:12px;
行高:20px;
顏色:#000000;
字體粗細:粗體;
文字對齊:居中;
-webkit-box-shadow: 插入 0 -1px 0 rgba(0, 0, 0, 0.15);
-moz-box-shadow: 插入 0 -1px 0 rgba(0, 0, 0, 0.15);
框陰影:插入 0 -1px 0 rgba(0, 0, 0, 0.15);
/*-webkit-transition: 寬度 3s 輕鬆;
-moz-transition:寬度 3s 緩動;
-o-transition:寬度 3s 緩動;
過渡:寬度 3s 緩動;*/
動畫:progress-bar-stripes 2s 線性無限;
背景顏色:#288ade;
}
.進度條條紋 p {
保證金:0;
}
@keyframes 進度條條紋 {
0% {
背景位置:40px 0;
}
100% {
背景位置:0 0;
}
}</前>
<link href="https://cdn.datatables.net/1.13.4/css/jquery.dataTables.min.css" rel="樣式表”/>
<腳本 src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<腳本 src="https://cdn.datatables.net/1.13.4/js/jquery.dataTables.min.js"></script>
;
<table id="data" class="table display table-stripped">
<thead>
<tr>
<th>ID</th>
<th>Album ID</th>
<th>Title</th>
<th>網址 Photo</th>
</tr>
</thead>
<tbody></tbody>
</table></pre>
<p><br /></p>
<p>表已成功加載,但進度條顯示<code>100%</code>,而不是應從<code>0%</code> 遞增到<code>100%</ code>。我想知道如果我不使用資料表,它是否有效(<em>但不完美</em>),如下面的程式碼所示。</p>
<p><br />></p>
<pre class="brush:js;toolbar:false;">讓handleProgressBar = (id, value, Total) => {
讓百分比 = Math.round((值 / 總計) * 10000) / 100;
$(id " > div").html(百分比 "%");
$(id " > div").css('width', 百分比 "%");
}
(異步()=>{
令 n = 5000;
handleProgressBar('#progress-bar', 0, n);
for(令 i = 1; i <= n; i ) {
handleProgressBar('#progress-bar', i, n);
等待新的 Promise(r => setTimeout(r, 1)); // 休眠1毫秒
}
})();</pre>
.progress-bar-striped {
溢出:隱藏;
高度:20px;
下邊距:20px;
背景顏色:#f5f5f5;
邊框半徑:4px;
-webkit-box-shadow:插入 0 1px 2px rgba(0, 0, 0, 0.1);
-moz-box-shadow:插入 0 1px 2px rgba(0, 0, 0, 0.1);
框陰影:插入 0 1px 2px rgba(0, 0, 0, 0.1);
}
.progress-bar-striped>div {
背景影像: 線性漸層(45deg, rgba(255, 255, 255, 0.15) 25%, 透明25%, 透明50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 55, 55, 55, 25, 5 0.15) 75%, 透明75%, 透明);
背景大小:40px 40px;
向左飄浮;
寬度:0%;
高度:100%;
字體大小:12px;
行高:20px;
顏色:#000000;
字體粗細:粗體;
文字對齊:居中;
-webkit-box-shadow: 插入 0 -1px 0 rgba(0, 0, 0, 0.15);
-moz-box-shadow: 插入 0 -1px 0 rgba(0, 0, 0, 0.15);
框陰影:插入 0 -1px 0 rgba(0, 0, 0, 0.15);
/*-webkit-transition: 寬度 3s 輕鬆;
-moz-transition:寬度 3s 緩動;
-o-transition:寬度 3s 緩動;
過渡:寬度 3s 緩動;*/
動畫:progress-bar-stripes 2s 線性無限;
背景顏色:#288ade;
}
.進度條條紋 p {
保證金:0;
}
@keyframes 進度條條紋 {
0% {
背景位置:40px 0;
}
100% {
背景位置:0 0;
}
}</pre>
<腳本 src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"> ;< /腳本>
;
<p>0%</p>
</div></pre>
<p><br />></p>
<p>我不知道錯誤出在哪裡。誰崩潰了我提供處理大量資料的資料表進度條的完美方法?先謝謝了。</p>
我已經找到解決辦法了。錯誤是我將
async
一詞放在res.forEach
中。當我將其放在fetch.then
之後並使用for
循環而不是forEach
時,函數執行的行為發生了變化並且可以成功完成。loadNumber
變數可用來決定每單位時間將在資料表中繪製多少資料。