【问题标题】:NodeJS: Can't return a result from a functionNodeJS:无法从函数返回结果
【发布时间】:2020-09-21 00:26:07
【问题描述】:
我正在尝试从这个函数返回结果:
var YouTube = require('youtube-node');
var youTube = new YouTube();
youTube.setKey('XXXXXXXXXXXX');
var result = youTube.search('World War z Trailer', 2,
function(error, result) {
if (error) {
console.log(error);
} else {
return result
}})
console.log(result)
但后来我在控制台中只得到未定义的结果。
【问题讨论】:
标签:
javascript
node.js
search
youtube
youtube-api
【解决方案1】:
您需要等待响应。
这个简单的答案是将console.log(result) 放在回调中。
或者您可以将search 方法包装在promise 中:
var promise = new Promise((resolve, reject) => {
youTube.search('World War z Trailer', 2, function (error, result) {
if (error) {
reject(error);
}
else {
resolve(result);
}
})
});
然后你可以像这样使用.then() 等待响应:
promise.then((result) => {
console.log(result);
}).catch((err) => {
console.error(err);
});
或者使用await/async:
(async () => {
try {
const result = await promise;
console.log(result);
} catch (err) {
console.error(err)
}
})();
【解决方案2】:
这里的最后一个函数是一个回调函数,它不会以你想要的方式返回值。阅读它在某处的工作原理,例如here。
你的问题可以通过 Promise 以这种方式解决
var search = new Promise(
(resolve, reject) => {
youTube.search('World War z Trailer', 2, function(error, result) {
if (error) { reject(error); }
resolve(result);
})
}
);
(async () => {
var result = await search;
console.log(result);
})()