我正在学习 Node js,并且希望代码在发送消息之前等待检索数据。现在看来它从页面获取了一些数据,然后使用它并发送具有相同数据的所有消息。有人可以帮助我吗?我真的很感激,提前谢谢。
const fetch = require("node-fetch");
const path = require("path");
const {
RichEmbed
} = require("discord.js");
const {
stripIndents
} = require("common-tags");
const {
cyan
} = require("../../colours.json");
const fs = require("fs");
module.exports = {
config: {
name: "viewfavoritequotes",
description: "Shows all your favorite quotes as individual messages.",
accessableby: "Member",
category: "miscellaneous",
aliases: ["viewfavquote", "viewfav", "viewfavq", "vfq"]
},
run: async (bot, message, args) => {
let arText;
let enText;
let surah;
let ayahNumber;
let englishName;
let englishNameTranslation;
let ayah;
let number;
let foundFile;
const quotes = `././favoritequotes/${message.author.id}/`;
fs.readdir(quotes, async function (err, files) {
if (err) {
console.log("Unable to scan directory: " + err);
}
files.forEach(async function (file) {
file = file.substring(0, file.indexOf('_'));
const url = "https://api.alquran.cloud/ayah/" + file + "/en.asad";
const urlArabic = "https://api.alquran.cloud/ayah/" + file;
await fetch(url).then(res => res.json()).then(data => {
enText = data.data.text;
await fetch(urlArabic).then(res => res.json()).then(data => {
arText = data.data.text;
ayahNumber = data.data.numberInSurah;
surah = data.data.surah.number;
englishName = data.data.surah.englishName;
englishNameTranslation = data.data.surah.englishNameTranslation;
number = data.data.number;
let embed = new RichEmbed()
.addField("Arabic", arText)
.addField("English", enText)
.setColor(cyan)
.setDescription(englishName + " (" + englishNameTranslation + ") " + surah + ":" + ayahNumber + " | Number: " + number)
.setAuthor(`Random quran quote!`, message.guild.iconURL)
await message.channel.send(embed);
})
});
setTimeout(function(){console.log("1 second timeout");}, 1500);
})
});
}
}
最佳答案
array.prototype.forEach
它是一个回调函数,最好使用 for (cosnt file of files)
。
这个soltuin必须正常工作,并且在使用use .then(data=>)时不需要使用await
const fetch = require("node-fetch");
const path = require("path");
const {
RichEmbed
} = require("discord.js");
const {
stripIndents
} = require("common-tags");
const {
cyan
} = require("../../colours.json");
const fs = require("fs");
module.exports = {
config: {
name: "viewfavoritequotes",
description: "Shows all your favorite quotes as individual messages.",
accessableby: "Member",
category: "miscellaneous",
aliases: ["viewfavquote", "viewfav", "viewfavq", "vfq"]
},
run: async (bot, message, args) => {
const quotes = `././favoritequotes/${message.author.id}/`;
fs.readdir(quotes, async function (err, files) {
if (err) console.log("Unable to scan directory: " + err);
for ( let file of files) {
file = file.substring(0, file.indexOf('_'));
let url = "https://api.alquran.cloud/ayah/" + file + "/en.asad";
let urlArabic = "https://api.alquran.cloud/ayah/" + file;
await fetch(url).then(res => res.json()).then(data => {
let enText = data.data.text;
fetch(urlArabic).then(res => res.json()).then(data => {
let arText = data.data.text;
let ayahNumber = data.data.numberInSurah;
let surah = data.data.surah.number;
let englishName = data.data.surah.englishName;
let englishNameTranslation = data.data.surah.englishNameTranslation;
number = data.data.number;
let embed = new RichEmbed()
.addField("Arabic", arText)
.addField("English", enText)
.setColor(cyan)
.setDescription(englishName + " (" + englishNameTranslation + ") " + surah + ":" + ayahNumber + " | Number: " + number)
.setAuthor(`Random quran quote!`, message.guild.iconURL)
await message.channel.send(embed);
})
});
}
});
}
}
关于javascript - 消息在需要所有数据之前发送,这意味着它发送了几条消息,所有消息中的数据都相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60812440/