消息在需要所有数据之前就被发送了,这意味着它发送了几个在所有消息中具有相同数据的消息



我正在学习节点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)

这个解决方案必须正常工作,并且当使用.then(data=>)时不需要使用等待

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);
})
});
}
});
}
}

最新更新