async在await循环中使用是否有任何问题?我正在尝试循环遍历文件数组和forEach每个文件的内容.
import fs from 'fs-promise'
async function printFiles () {
const files = await getFilePaths() // Assume this works fine
files.forEach(async (file) => {
const contents = await fs.readFile(file, 'utf8')
console.log(contents)
})
}
printFiles()
Run Code Online (Sandbox Code Playgroud)
这段代码确实有效,但这可能会出错吗?我有人告诉我你不应该使用await这样的高阶函数,所以我只是想问一下这是否有任何问题.
之间有什么区别:
const [result1, result2] = await Promise.all([task1(), task2()]);
Run Code Online (Sandbox Code Playgroud)
和
const t1 = task1();
const t2 = task2();
const result1 = await t1;
const result2 = await t2;
Run Code Online (Sandbox Code Playgroud)
和
const [t1, t2] = [task1(), task2()];
const [result1, result2] = [await t1, await t2];
Run Code Online (Sandbox Code Playgroud) 如何更改以下代码,以便触发异步操作并同时运行?
const value1 = await getValue1Async();
const value2 = await getValue2Async();
// use both values
Run Code Online (Sandbox Code Playgroud)
我需要做这样的事情吗?
const p1 = getValue1Async();
const p2 = getValue2Async();
const value1 = await p1;
const value2 = await p2;
// use both values
Run Code Online (Sandbox Code Playgroud) 我正在开发一个使用 Array.reduce 的函数,并且需要在 reduce 函数内添加异步 API 调用。这要求我对传入的回调使用异步函数reduce,因为我await在函数内部使用它来等待异步 API 调用。
我在正确编写归约时遇到一些问题。这是目前的情况(工作):
const result = records.reduce((array, currValue) => {
//do stuff
return array
}, [])
Run Code Online (Sandbox Code Playgroud)
这是我尝试将其更改为:
const result = records.reduce(async(array, currentValue) => {
// do stuff
someValue = await asyncCall(currentValue)
array.add(someValue)
return array
}, [])
Run Code Online (Sandbox Code Playgroud)
我收到的错误是“没有与此调用匹配的重载”。
这对我来说似乎很有意义,因为reduce接受返回数组的回调,而异步函数返回回调,而不是数组。但是当我阅读如何将异步函数传递到 .reduce 的其他示例时,它们似乎都只是将异步函数传递到 reduce 中,没有任何问题。
以下是我查看的几个链接:
https://advancedweb.hu/how-to-use-async-functions-with-array-reduce-in-javascript/
JavaScript 数组 .reduce 与 async/await
https://gyandeeps.com/array-reduce-async-await/
当我将归约函数声明为异步时,我得到了不匹配重载错误,这对我来说是有意义的。我不确定这对其他人来说是否有效。
我有一组对象,我必须在来自 async 函数的每个对象上添加一个属性
我正在做一个 Array.reduce 来迭代每个元素并只返回一个结果:一个具有新属性的对象数组。
我有这个
const res = await resultOne.reduce(async (users = [], user, i) => {
let userName;
try {
let { name } = await names.getNames(user.id);
userName = name;
} catch (error) {
throw error;
}
delete user.id;
users.push({ ...user, userName });
return users;
}, []);
Run Code Online (Sandbox Code Playgroud)
但我收到消息
推送不是用户的功能
这是因为我认为是一个承诺。
我如何处理 areduce或 a 中的异步请求map
我试图为数组中的所有水果设置随机数,并返回一个包含减速器中具有异步函数的所有水果的对象,但只返回数组的最后一个元素
(async () =>
console.log(
await [("apple", "banana", "orange")].reduce(async (o, fruit) => {
const random_number = await new Promise((resolve) => setTimeout(() => resolve(Math.random()), 200));
return { ...o, [fruit]: random_number };
}, {})
))();Run Code Online (Sandbox Code Playgroud)
javascript ×6
async-await ×4
node.js ×2
promise ×2
reduce ×2
asynchronous ×1
ecmascript-6 ×1
es2017 ×1