鍍金池/ 問答/HTML/ 如何讓while循環(huán)里執(zhí)行完函數(shù)輸出結(jié)果了才進行下一個循環(huán)?

如何讓while循環(huán)里執(zhí)行完函數(shù)輸出結(jié)果了才進行下一個循環(huán)?

如何讓while循環(huán)里執(zhí)行完函數(shù)輸出結(jié)果了才進行下一個循環(huán)?
具體來說,下面的例子里,如何讓f(list)執(zhí)行完輸出結(jié)果后才執(zhí)行j++,然后再進入下一個循環(huán)?

問題如上,代碼如下:

const f = () => {
    ...
}

let arr = ['abc', 'def']
let j=0;

while (j<arr.length) {
    const list = arr[j];
    f(list);
    j++;
}
回答
編輯回答
愿如初
如何讓f(list)執(zhí)行完輸出結(jié)果后才執(zhí)行j++,然后再進入下一個循環(huán)?

本來就是這樣的啊。。。就算你包含異步方法,那也是執(zhí)行完輸出結(jié)果,只是沒等待異步結(jié)果返回而已。

const f = (list) => {
    return new Promise((reslove) => {
        setTimeout(() => {
            console.log(list);
            reslove();
        }, 1000);
    })
}

async function run() {
    let arr = ['abc', 'def']
    let j = 0;

    while (j < arr.length) {
        const list = arr[j];
        await f(list);
        console.log('j=', j);
        j++;
    }
}

run();
2017年3月7日 17:48
編輯回答
尛憇藌

可以用遞歸來實現(xiàn)啊

      const f = (list) => {
        return new Promise((reslove) => {
          setTimeout(() => {
            console.log(list);
            reslove();
          }, 1000);
        })
      };

      function run() {
        let arr = ['abc', 'def'];
        let j = 0;
        
        loop();
        /*寫個方法,遞歸來實現(xiàn)*/
        function loop() {
          const list = arr[j];
          f(list).then(()=>{
            if(j < arr.length)
              loop();
          });
          console.log('j=', j);
          j++;
        }
      }
      run();
    }
2017年6月29日 17:25
編輯回答
拮據(jù)
const f = function (data) {
    return new Promise((res, rej) => {
        setTimeout(() => {
            //在此處做操作
            console.log(data);
            res("complete");
        }, 1000);
    });
}

let arr = ['abc', 'edf', 'ghi'];
let j = 0;

for (let i = 0; i < arr.length; i++) {
    f(arr[i])
    .then(function (str) {
        console.log("j: " + j);
        j++;
    });  
}

可以使用Promise將異步操作包起來,reslove時返回,但是循環(huán)是控制不了的,它會繼續(xù),所以要使用for,不然就會陷入死循環(huán),在執(zhí)行完f函數(shù)之后再j++是可以做到的

2018年9月7日 00:01