将回调中的变量返回到已定义的函数NodeJS中

Returning variable from callback into a defined function-NodeJS

本文关键字:定义 函数 NodeJS 返回 回调 变量      更新时间:2023-09-26
music.playsong = function(vars){
//vars is an array with a Key named "song"
youTube.search(vars["song"], 2, function(error, result) {
  if (error) {
   console.log(error)
   return;
  }else {
     console.log("Success")
    return result
 }
 })
}

我目前将此函数称为

music.playsong(data)

然而,在这个函数中,我无法访问底层回调并从中获取值。如何获得music.playsong((以返回回调结果而不阻止执行?

您希望使用异步函数作为sync。所以这是不可能的。因此,您需要将方法更改为异步,如下所示:

music.playsong = function(vars, cb){
//vars is an array with a Key named "song"
youTube.search(vars["song"], 2, function(error, result) {
  if (error) {
   console.log(error)
   process.nextTick(() => {
    cb(error)
   })
  }else {
     console.log("Success")
     process.nextTick(() => {
      cb(null, result)
     })
 }
 })
}
music.playsong = function(vars){
youTube.search(vars["song"], 2, function(error, result) {
if (error) {
   return callback("Error",{});
}else {
    console.log("Success")
    return callback(""success",result)
    }
})
}
function callback(data){
//TODO
}

看起来youtube.search是一个异步操作。

在这种情况下,您应该使用Promise

例如

music.playsong = function(vars) {
  return Promise(resolve, reject) {
    //vars is an array with a Key named "song"
    youTube.search(vars["song"], 2, function(error, result) {
      if (error) {
        return reject(err);
      } 
        console.log("Success")
        return resolve(result);
      }
    })  
  }
}
music.playsong('').then(function(result) {
  // you will get result here
});

在Promise中,您将拥有用于处理异步操作的resolvereject

当调用resolve时,它将把data传递给.thenreject被缩放时,它将把err传递给.catch