2016-07-30 58 views
1
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 
} 
}) 
} 

我目前在调用这个函数作为返回从回调变量为定义函数的NodeJS

music.playsong(data) 

然而,在此功能,我不能访问底层的回调,并从该值。我如何得到这个music.playsong()返回回调的结果没有阻止执行?

回答

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

它看起来像youtube.search是一个异步动作。

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

例如

​​

在无极,你将有resolvereject处理异步操作。

resolve接到电话,它会通过data.thenreject得到caleed,它会通过err.catch