将回调中的变量返回到已定义的函数NodeJS中
Returning variable from callback into a defined function-NodeJS
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中,您将拥有用于处理异步操作的resolve
和reject
。
当调用resolve
时,它将把data
传递给.then
当reject
被缩放时,它将把err
传递给.catch
相关文章:
- 用嵌套函数和默认函数定义函数
- 自定义函数中的光标位置
- Jquery未定义函数正在停止其他操作
- 在不破坏未定义函数的情况下,对多个视图使用单个js文件
- javascript无法重新定义函数内部的全局对象
- 定义函数时,如何捕获外部变量的当前值
- 能够在定义函数表达式之前使用它
- Google Sheet自定义函数返回0
- Javascript-defineProperty和直接在对象上定义函数之间的区别
- 其中是自定义函数中的属性
- 创建自定义函数以在函数上运行完整的多选下拉列表
- Google Sheets自定义函数条件格式
- 为什么当我需要位于顶部的函数时,在脚本中的某些点上没有定义函数
- 使用变量的名称,然后为该变量定义函数
- dalek回调或自定义函数
- 如何在angular ui模态控制器中定义函数
- Uncaught ReferenceError:尝试在Android网络视图中访问时未定义函数
- UI网格:如何从自定义函数访问MODEL_COL_FIELD
- 在构造函数中定义函数会比将其附加到原型消耗更多的内存
- 使用 Javascript 中的函数重新定义函数