菠菜呀
菠菜呀
  • 发布:2018-04-10 13:08
  • 更新:2020-04-30 00:18
  • 阅读:4339

downloader 下载进度不能正确获取

分类:HTML5+

start() {
let _this = this;
this.isstart = true;
this.downGameTasks[0] = plus.downloader.createDownload(
'http://download.yxorange.com/dzg/com.legu.king.mgtv.apk',
{ method: 'GET' },
// 下载完成执行的回调函数
(d, status) => {
alert('下载完成');
console.log(d);
console.log(status);
},
);
this.downGameTasks[0].addEventListener('statechanged', (task) => {
if (!this.downGameTasks[0]) { return; }
let progressVal = 0;
// no default
switch (task.state) {
case 1:
console.log('开始下载');
break;
case 2:
console.log('链接到服务器...');
break;
case 3:
progressVal = Math.ceil(task.downloadedSize / task.totalSize* 100) ;
_this.precent = progressVal;
break;
case 4:
cnosole.log('监听下载完成');
break;
}
});
this.downGameTasks[0].start();

下载的时候进度直接从0变到100,但是文件其实并没有下载完成。
有人遇到过没

2018-04-10 13:08 负责人:无 分享
已邀请:
最小栗子

最小栗子

问题在于这一句: progressVal = Math.ceil(task.downloadedSize / task.totalSize) * 100;
Math.ceil()返回大于或等于一个给定数字的最小整数
task.downloadedSize / task.totalSize 永远不可能大于1,Math.ceil(task.downloadedSize / task.totalSize)的结果就永远是1
你要这样写Math.ceil(task.downloadedSize / task.totalSize * 100);

撸三发

撸三发 - 本人唯一QQ:659338841,切勿骚扰;\n博客:https://blog.csdn.net/baidu_21919557

start() {

let _this = this;

this.isstart = true;

this.downGameTasks[0] = plus.downloader.createDownload(

'http://download.yxorange.com/dzg/com.legu.king.mgtv.apk',

{ method: 'GET' },

// 下载完成执行的回调函数

(d, status) => {

alert('下载完成');

console.log(d);

console.log(status);

},

);

this.downGameTasks[0].addEventListener('statechanged', (task) => {

if (!this.downGameTasks[0]) { return; }

// no default

switch (task.state) {

case 1:

console.log('开始下载');

break;

case 2:

console.log('链接到服务器...');

break;

case 3:
let progressVal = 0;//写成局部变量试试
progressVal = Math.ceil(task.downloadedSize / task.totalSize) * 100;

_this.precent = progressVal;

break;

case 4:

cnosole.log('监听下载完成');

break;

}

});

this.downGameTasks[0].start();

  • 菠菜呀 (作者)

    谢谢大佬, 搞定了~


    2018-04-10 14:01

  • 孟尧

    你好 我是用的的你的写法,let progressVal = 0;//写成局部变量试试,还是直接输出的100


    2019-07-01 17:13

该问题目前已经被锁定, 无法添加新回复