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() 在不阻止执行的情况下返回回调结果?
答案 0 :(得分:0)
您希望使用异步功能作为同步。所以这是不可能的。因此,您需要将方法更改为异步,如下所示:
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)
})
}
})
}
答案 1 :(得分:0)
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
}
答案 2 :(得分:0)
看起来youtube.search
是异步操作。
在这种情况下,您应该使用Promise
e.g。
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中,您将resolve
和reject
用于处理异步操作。
调用resolve
后,它会将data
传递给.then
当reject
被解决时,它会将err
传递给.catch