Javascript 如何处理循环和承诺?
我在一个循环中使用承诺 我试图做一个循环,但是迭代器(当然)随着循环而改变Javascript 如何处理循环和承诺?,javascript,node.js,request,es6-promise,Javascript,Node.js,Request,Es6 Promise,我在一个循环中使用承诺 我试图做一个循环,但是迭代器(当然)随着循环而改变 let fctPromise = (i) => { return new Promise((resolve, reject) => { setTimeout(() => { resolve(true + "//" + i) }, parseInt(i) * 1000) }); } var arr = [5, 3, 4, 2, 1]
let fctPromise = (i) => {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(true + "//" + i)
}, parseInt(i) * 1000)
});
}
var arr = [5, 3, 4, 2, 1];
for (var i of arr) {
fctPromise(i).then(value => console.log(value, "////", i))
}
循环工作正常,它通过数组。但是
i
正在改变,我应该改变我处理它的方式吗?所以我只是改变这部分代码:
for (var lang of language)
到
让它成为新的变量promise解析后的lang变量为changes。所以我认为你应该坚定地遵守诺言
let iterateOnJson = (jsonObj, originLanguage, TargetLanguage) => {
var promiseAll = [];
let jsonObjClone = merge.mergeDeep({}, jsonObj);
let iterateInner = (jsonObj) => {
for (let item in jsonObj) {
if (typeof(jsonObj[item]) == "string") {
let promise = translateIt(jsonObj[item], originLanguage, TargetLanguage).then(translatedWord => jsonObj[item] = JSON.parse(translatedWord).translationText);
promiseAll.push(promise);
} else {
iterateInner(jsonObj[item])
}
}
}
iterateInner(jsonObjClone);
return Promise.all(promiseAll).then(data => {
return { jsonObjClone: jsonObjClone,
lang: TargetLanguage };
});
}
//HERE IS THE LOOP
for (var lang of language) {
console.log(lang);
iterateOnJson(translateFile, "fr", lang).then(value => {
let fileTitle = value.lang;
fs.writeFile("mypath/" + fileTitle + i + ".json", JSON.stringify(value.jsonObjClone),
function(err) {
if (err) {
return console.log(err);
}
console.log("The file was saved!", value.lang);
});
});
}
如果我对你的理解是正确的,试着用承诺。all() 而不是使用 arr的varⅠ 使用 让我离开arr
请不要像这样使用
var
和const
for (const i of arr) {...}
让fctPromise=(i)=>{
返回新承诺((解决、拒绝)=>{
设置超时(()=>{
解析(真+“/”+i)
},parseInt(i)*1000)
});
}
var-arr=[5,3,4,2,1];
用于(arr的常数i){
fctPromise(i).then(value=>console.log(value,“//”,i))
}
/*印刷品
true//1///1
true//2///2
true//3///3
true//4///4
true//5///5
*/
Let is the new var!!让我们来解决var存在的许多问题:DI修改了我的问题,使其更容易理解。你的答案比我的完全好。谢谢
let fctPromise = (i) => {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(true + "//" + i)
}, parseInt(i) * 1000)
});
}
var arr = [5, 3, 4, 2, 1];
Promise.all(arr.map(i=>{
return fctPromise(i).then(value => console.log(value, "////", i))
}));
let fctPromise = (i) => {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(true + "//" + i)
}, parseInt(i) * 1000)
});
}
var arr = [5, 3, 4, 2, 1];
for (let i of arr) {
fctPromise(i).then(value => console.log(value, "////", i))
}
for (const i of arr) {...}