uci*_*ass 0 javascript node.js promise
我有一个项目,我需要编写一个函数来顺序计算几个东西,然后将结果写入SQL DB.不幸的是,我需要重复这个超过40,000次.我使用node.js并承诺完成此任务,但是在10,000次左右的计算之后程序刚刚死亡的内存使用量几乎达到2GB.我开发了自己的本机promiseEach函数,该函数以数量方式获取数组项并使用promises链接它.
我在这里做错了什么?:
function promiseEach(array,promiseFn){
return new Promise(function(resolve,reject){
try {
var promiseArray = [];
var json = { array: array, counter: 0 }
for (var i = 0; i < array.length; i++) {
promiseArray.push(promiseFn)
}
promiseArray.reduce(function(preFn,curFn,index,pArray){
return preFn
.then( function(z){ return json.array[json.counter++] })
.then(curFn)
},
Promise.resolve(json.array[json.counter]))
.then(resolve,reject)
}catch(err){
console.log("promiseEach ERROR:");
reject(err)
}
})
}
Run Code Online (Sandbox Code Playgroud)
好吧,你开始过度复杂的功能 - 从我所知道的,你按顺序为每个数组内容调用promiseFn
以下代码在功能上与您的代码相同
function promiseEach(array, promiseFn) {
return array.reduce(function(prev, item) {
return prev.then(function() {
return promiseFn(item);
});
}, Promise.resolve());
}
Run Code Online (Sandbox Code Playgroud)
不能保证这会解决实际问题
为了完整性,正如您在nodejs中编码一样,与ES2015 +中编写的代码相同
let promiseEach = (array, promiseFn) =>
array.reduce((prev, item) =>
prev.then(() =>
promiseFn(item)
)
, Promise.resolve());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
212 次 |
| 最近记录: |