【发布时间】:2018-08-26 11:58:05
【问题描述】:
我有一个函数“promiseFunction”,它返回一个承诺,它会在以后解决。
我需要多次调用此函数,但我只希望一次执行该函数的设定次数。
该函数在我的计算机上调用一些外部单线程 c 代码,如果我一次调用太多此代码的实例,我的系统会崩溃,但如果我一次按顺序调用它 1,它会非常慢,因为只有一个线程我的 cpu 正在做任何工作。
所以我想出了下面的代码,但是它不起作用。它将并行调用前 10 个 Promise,但慢慢地它开始一次调用越来越少的 Promise,直到它一次只调用 1 个 Promise。
var totalNumberOfPromises = // total number times to run promiseFunction;
var promiseCounter = 0; // keep track of which promise call this is
for(w=0;w<10;w++){ // run 10 promises at a time
promiseFunction().then(function(resolve) {
loadNewPromise();
})
promiseCounter++;
}
function loadNewPromise(){
if(promiseCounter<totalNumberOfPromises){
promiseFunction().then(function(resolve) { loadNewPromise(); });
}else{
alert("Finished");
}
promiseCounter++;
}
上面的代码有什么问题会导致这种行为吗?有没有这样做的标准方法?
【问题讨论】:
-
我至少看到一件事:在代码的第二部分,
promiseFunction.then没有调用promiseFunction。 -
它正在调用 loadNewPromise(),它是调用 promiseFunction() 的父函数。这将如何导致问题?
-
在顶部代码中,您有
promiseFunction().then,但在底部,您有promiseFunction.then。.then应该只在 promises 上调用,而不是函数 -
which returns a promise when the function is complete- 实际上,它返回一个承诺,该承诺会在稍后解决 - 但技术细节可能会令人困惑 -
@CertainPerformance 哦,我看到了错误,抱歉,这是转换为伪代码的错误。使用我的真实代码,我都成功调用了
标签: javascript callback promise