Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/472.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何处理循环和承诺?_Javascript_Node.js_Request_Es6 Promise - Fatal编程技术网

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) {...}