Javascript Discord Bot异步函数中的giphyapi

Javascript Discord Bot异步函数中的giphyapi,javascript,node.js,promise,discord,giphy,Javascript,Node.js,Promise,Discord,Giphy,我开始编写一个Discord机器人,他目前没有那么多功能。所以现在我在做命令!gif,所以我在这里键入一个单词,它是spider,作为响应,我得到一个带有spider标记的gif 这是我的不和谐代码: if(command == "gif"){ message.channel.send(modSearchGif.searchForGif("spider")); } modSearchGif是在这个.js脚本中实现的一个模块 该模块如下所示: var GphApiClient = re

我开始编写一个Discord机器人,他目前没有那么多功能。所以现在我在做命令!gif,所以我在这里键入一个单词,它是spider,作为响应,我得到一个带有spider标记的gif

这是我的不和谐代码:

if(command == "gif"){
   message.channel.send(modSearchGif.searchForGif("spider"));  
}
modSearchGif是在这个.js脚本中实现的一个模块

该模块如下所示:

var GphApiClient = require('giphy-js-sdk-core')
const client = GphApiClient(process.env.GIPHYTOKEN)

const searchForGif = (gifName) => {
client.search('gifs', {"q": gifName, "limit": 1})
.then((response) => {
   var gif = response.data[0].url;
   return gif;
 })
 .catch((err) => {
  return err;
 })
}

module.exports.searchForGif = searchForGif;
因此,如果在Discord通道中写入gif命令,则Bot将调用模块并为其提供参数spider,这非常简单。 然后,客户端在giphy数据库中搜索该参数并返回json脚本。这是一个承诺,如果承诺已完成,gif将返回主脚本并发送到Discord频道

这就是问题所在,承诺调用是异步的,因此Discord命令message.channel.send在承诺被完全填充之前执行,因此消息未定义,并且我收到一个错误,无法发送空消息

我希望在返回gif时执行message.channel.send,而不是更早

我真的对此一无所知。 你们有什么想法吗


提前谢谢你

我会尝试这样的方法,因为then/catch也会返回一个承诺

if(command == "gif"){
   var searchPromise = modSearchGif.searchForGif("spider");

   searchPromise.then((gif) => {
     message.channel.send(gif);
   })  
}
若要使其发挥作用,则应返还承诺,即:

const searchForGif = (gifName) => {
  return client.search('gifs', {"q": gifName, "limit": 1})
         .then((response) => {
           var gif = response.data[0].url;
           return gif;
         })
         .catch((err) => {
           return err;
         })
}

谢谢你,我怎样才能回报你的承诺?这对我来说是非常新的。只需将return放在client.search前面,就像第二段代码一样。然后searchForGif函数返回一个Promise,可以根据第一个代码片段使用它。哇,谢谢你,它工作起来很有魅力!太棒了,我没想过你能回到的目标。