Javascript 承诺期间检查进度

Javascript 承诺期间检查进度,javascript,promise,progress,Javascript,Promise,Progress,关于javascript的promise api,我有一个非常基本的问题。我有一个承诺电话,可能需要一段时间才能完成。在处理过程中,我想报告UI中的进度-通过百分比加载信息。方法只指向promise api返回的时间。但如何在处理过程中报告进度 我试着看一些其他的stackoverflow答案,但大多数情况下它们处理多个承诺,并使用setTimeOut()API。我只有一个promise api,不知道需要多长时间(取决于调用时数据库中的数据)。由于我不知道可能需要多长时间,我也不知道如何显示百

关于javascript的promise api,我有一个非常基本的问题。我有一个承诺电话,可能需要一段时间才能完成。在处理过程中,我想报告UI中的进度-通过百分比加载信息。方法只指向promise api返回的时间。但如何在处理过程中报告进度

我试着看一些其他的stackoverflow答案,但大多数情况下它们处理多个承诺,并使用setTimeOut()API。我只有一个promise api,不知道需要多长时间(取决于调用时数据库中的数据)。由于我不知道可能需要多长时间,我也不知道如何显示百分比信息。有什么建议吗


我使用的是基本的javascript,在代码中去掉了可观察的对象,不能使用react或angular(没有访问权限)

如果不知道需要加载多少字节以及已经加载了多少字节,则无法显示任何正在进行的操作。最简单的方法是显示一些加载器,等等。或者你只需要把你的主要承诺分成简单的和小的两部分。

如果你不知道需要加载多少字节以及已经加载了多少字节,你就无法显示任何正在进行的内容。最简单的方法是显示一些加载器,等等。或者你只需要把你的主要承诺分成简单的和小的两部分

关于javascript的promise api,我有一个非常基本的问题

有一个非常基本的答案;promise api不支持“开箱即用”的进度

不知道可能需要多长时间(取决于我打电话时数据库中的数据)

没有这些信息,就不可能取得任何有意义的进展。您需要做的第一件事是快速呼叫数据库,询问“需要如何加载妇幼保健数据”。然后,您应该以块的形式加载数据,并提供一种方法,以便在积累数据时将加载的“X块/Y块”传递回UI。简言之,这是“流式”数据的基本方式

这就是为什么,当你看到这一点时,他们会用多个承诺来实现,每个“进度承诺”都会在进度更新时解析,从而允许UI更新进度条

//虚假承诺表示不超过90秒的行动
var承诺=新承诺((解决)=>{
设置超时(解析,20000);
});
//对progressbar的引用
var progressBar=document.querySelector('.progress');
无功电流=0;
//每5秒更新一次的重复计时器
var updater=setInterval(()=>{
如果(当前>=100)
clearInterval(更新程序);
//更新日期:5/90
var updateAmount=(5/90)*100;
当前+=更新计数;
progressBar.style.width=当前+“%”;
},5000);
//当长动作解析后,将进度条设置为100并停止重复事件
答应。然后(()=>{
clearInterval(更新程序)
progressBar.style.width=“100%”;
控制台日志(“完成”);
});
。进度条{
宽度:100%;
高度:50px;
}
.进展{
宽度:0%;
身高:100%;
背景颜色:蓝色
}

关于javascript的promise api,我有一个非常基本的问题

有一个非常基本的答案;promise api不支持“开箱即用”的进度

不知道可能需要多长时间(取决于我打电话时数据库中的数据)

没有这些信息,就不可能取得任何有意义的进展。您需要做的第一件事是快速呼叫数据库,询问“需要如何加载妇幼保健数据”。然后,您应该以块的形式加载数据,并提供一种方法,以便在积累数据时将加载的“X块/Y块”传递回UI。简言之,这是“流式”数据的基本方式

这就是为什么,当你看到这一点时,他们会用多个承诺来实现,每个“进度承诺”都会在进度更新时解析,从而允许UI更新进度条

//虚假承诺表示不超过90秒的行动
var承诺=新承诺((解决)=>{
设置超时(解析,20000);
});
//对progressbar的引用
var progressBar=document.querySelector('.progress');
无功电流=0;
//每5秒更新一次的重复计时器
var updater=setInterval(()=>{
如果(当前>=100)
clearInterval(更新程序);
//更新日期:5/90
var updateAmount=(5/90)*100;
当前+=更新计数;
progressBar.style.width=当前+“%”;
},5000);
//当长动作解析后,将进度条设置为100并停止重复事件
答应。然后(()=>{
clearInterval(更新程序)
progressBar.style.width=“100%”;
控制台日志(“完成”);
});
。进度条{
宽度:100%;
高度:50px;
}
.进展{
宽度:0%;
身高:100%;
背景颜色:蓝色
}


你总是可以显示“不到2个月就可以完成”,这样人们就会惊喜不已。撇开玩笑不谈,如果你对成绩没有估计,你想展示什么样的进步?而且,承诺没有进展。但你可以设置一个回调,让它每隔一段时间处理一次,让它知道发生了什么。你可以总是显示“不到两个月就可以完成”,当它发生时,人们会惊喜不已。撇开玩笑不谈,如果你对成绩没有估计,你想展示什么样的进步?而且,承诺没有进展。但是你可以设置一个回调,每隔一段时间处理一次,让它知道发生了什么。实际上,它是一个RESTAPI调用,在内部查询数据库。进行多个RESTAPI调用可能代价高昂。但我们可以肯定的是,RESTAPI调用的最大返回时间是90秒。那么,如果数据返回速度快于预期,是否可以显示一些进度(比如每5秒一次)并提前完成进度