cho*_*hoc 3 javascript asynchronous promise
理论:
我在开始时做了大约100个承诺,然后用它来解决它们Promise.all().
这100个承诺中的每一个依次进行一些异步REST调用,其响应可能主要变化(例如由于网络连接).
解决所有100个承诺的过程大约需要20秒.在此期间,应向用户提供进度的实时反馈,以使他保持参与.
为了实现这些异步操作的进度,我想在客户端使用progressCounter,它的值将在每个promise被解析后立即更新.
事情是,如果progressCounter = 1并且所有这些操作都是异步的,我担心会遇到一种竞争条件,例如,由两个不同的promises检索的progressCounter的当前值可能会被发现为1,因此他们可能会尝试增加progressCounter因为竞争条件,所以最终值不会是3.
实验: 我尝试重现这个理论但不能使用以下内容:
var progress = {};
progress.counter = 1;
var promise1 = new Promise(function(resolve, reject) {
resolve();
});
var promise2 = new Promise(function(resolve, reject) {
resolve();
});
promise1.then(function() {
progress.counter += 1;
});
promise2.then(function() {
progress.counter += 1;
});
setTimeout(function() {
alert(progress.counter); // progress.counter: 3
}, 1000);`
Run Code Online (Sandbox Code Playgroud)
问题: 问题是否可以在上面的理论中描述这样的竞争条件?如果没有,理论有何缺陷?如果是,那么跟踪承诺解决进度的好方法是什么?
| 归档时间: |
|
| 查看次数: |
1548 次 |
| 最近记录: |