是否可以在for()循环之外的其他地方使用await?

时间:2018-10-10 06:43:23

标签: javascript node.js async-await ecmascript-2017

是否有某种方法可以使用_instanceof在NOT <?php $inputStr = 'x-y-z 1-2-3-4 x-y-z'; $outputStrWords = []; $inputStrWords = explode(' ', $inputStr); foreach ($inputStrWords as $key => $word) { $charactersInWord = explode('-', $word); $allCharsDigit = true; foreach ($charactersInWord as $char) { $allCharsDigit &= is_numeric($char) ? true : false; } $outputStrWords[$key] = $word; if($allCharsDigit) { $outputStrWords[$key] = str_replace('-', '', $word); } } $outputStr = implode(' ', $outputStrWords); echo $outputStr; exit; 循环中调用异步函数(例如foreach,map),并仅在所有异步函数完成后才继续执行其余代码?

for

3 个答案:

答案 0 :(得分:1)

从技术上讲,您可以“执行”,但您不想这样做。如果您有很多需要解决的承诺,最好使用Promise.all()来解决。

答案 1 :(得分:1)

您正在寻找Promise.all()。它获取Promise s的数组(或其他可迭代对象),并返回一个新的Promise,当所有输入Promise都解析时,解析的内容就解决了。输入Promise是并行执行的(比循环中每个await的{​​{1}}都要好得多)。

Promise await

Promise

答案 2 :(得分:0)

可以在await函数中使用async。因此,将其与async之外的for中使用的其他语句一起使用,即do..whilewhile循环语句。

  

是否可以在NOT for循环中调用异步函数(例如foreach,map)

这是另一种情况。像forEach这样的基于回调的方法都有自己的功能。在常规函数中不能使用await

arr.forEach(() => {
  await ... // syntax error
});

async函数与awaitforEach is a common mistake一起使用,因为它会导致被忽略的承诺:

arr.forEach(async () => {
  await ... // isn't awaited outside function
});

由于async..await的工作方式,可以将mapasync一起使用,map使用const arrOfPromises = arr.map(async () => { await ... }); 返回的promise并映射到结果数组:

map

应该显式地链接承诺,以便在await Promise.all(arrOfPromises); 函数之外等待:

matplotlib.dates.DateFormatter