一部の async replace で使用および理解するのが簡単な関数:
async function replaceAsync(str, regex, asyncFn) {
const promises = [];
str.replace(regex, (match, ...args) => {
const promise = asyncFn(match, ...args);
promises.push(promise);
});
const data = await Promise.all(promises);
return str.replace(regex, () => data.shift());
}
置換機能を 2 回実行するため、重い処理を行う場合は注意してください。ただし、ほとんどの用途では、非常に便利です。
次のように使用します。
replaceAsync(myString, /someregex/g, myAsyncFn)
.then(replacedString => console.log(replacedString))
またはこれ:
const replacedString = await replaceAsync(myString, /someregex/g, myAsyncFn);
myAsyncFn
約束を返さなければならないことを忘れないでください。
asyncFunction の例:
async function myAsyncFn(match) {
// match is an url for example.
const fetchedJson = await fetch(match).then(r => r.json());
return fetchedJson['date'];
}
function myAsyncFn(match) {
// match is a file
return new Promise((resolve, reject) => {
fs.readFile(match, (err, data) => {
if (err) return reject(err);
resolve(data.toString())
});
});
}