【问题标题】: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);
    })()             
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-07
      • 1970-01-01
      • 2020-05-11
      • 2016-03-11
      • 2020-03-06
      • 1970-01-01
      • 1970-01-01
      • 2012-12-19
      相关资源
      最近更新 更多