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)
    }
})();