NodeJS:不能 return 函数的结果
NodeJS: Can't return a result from a function
我正在尝试 return 这个函数的结果 :
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)
但后来我只在控制台中得到未定义的结果。
此处的最后一个函数是回调函数,它不会return以您想要的方式赋值。在某处阅读它的工作原理,例如 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);
})()
您需要等待回复。
这个简单的答案是将 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)
}
})();
我正在尝试 return 这个函数的结果 :
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)
但后来我只在控制台中得到未定义的结果。
此处的最后一个函数是回调函数,它不会return以您想要的方式赋值。在某处阅读它的工作原理,例如 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);
})()
您需要等待回复。
这个简单的答案是将 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)
}
})();