ठीक है तो मेरे पास ऐसा कोड है
giveaways.forEach( x => {
if (x.extraData) {
const guild = client.guilds.cache.get(x.extraData.server)
const channel = guild.channels.cache
.filter((channel) => channel.type === 'text')
.first()
channel.createInvite().then( inv => { // returns promise
embed.addField(`Join Requirement Giveaway:`, `**[This Server](${inv})**`)
})
} else {
embed.addField(`Normal Giveaway:`,`**[${x.prize}](https://discord.com/channels/${x.guildID}/${x.channelID}/${x.messageID})**`)
}
})
जहां टिप्पणी की गई भाग एक वादा लौटाता है, मैं प्रत्येक लूप के लिए उपयोग कर रहा हूं और मुझे पता है कि हम एक एसिंक्रोनस में मूल्यों को अधिलेखित करने में असमर्थ हैं इसलिए मेरा एम्बेड बिना वादे के लूप के हिस्से को वापस कर देता है, मैं एक संभावित समाधान की तलाश में हूं यह।
0
Zero
31 मई 2021, 09:22
1 उत्तर
सबसे बढ़िया उत्तर
आप Promise.all को मानचित्र के साथ उपयोग कर सकते हैं
इस कदर
Promise.all(giveaways.map((x) => new Promise((resolve, reject) => {
// ~~ doing something
somePromises.then((inv) => {
embed.addField(/*~~~*/)
resolve();
})
})))
.then(() => {
// next things..
});
2
Yonghoon Lee
31 मई 2021, 09:47
ठीक है, उचित लगता है, धन्यवाद!
– Zero
31 मई 2021, 09:31
जवाब के लिए धन्यवाद। मैं कोड पर प्रतीक्षा हटा दूंगा :)
– Yonghoon Lee
31 मई 2021, 09:46
4
हां लेकिन नहीं। यह कोड वादों और प्रतीक्षा और "नया वादा" -एंटीपैटर्न का एक अजीब मिश्रण है।
– map
: .map(async (x) => { ... const inv = await channel.createInvite(); ... })
में async फ़ंक्शन का बेहतर उपयोग करें
Thomas
31 मई 2021, 09:47
var z; x.forEach( async y => { z = 1})
कहें जो संभव नहीं होगा