NodeJS:不能从函数中返回结果。

问题描述 投票:0回答:2

我试图从这个函数中返回结果。

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)

但是在控制台中我只得到了undefined的结果,我想从这个函数中返回结果: var YouTube = require('youtube-node'); var youTube = new YouTube(); youTube = new YouTube().

javascript node.js search youtube youtube-api
2个回答
0
投票

這裏的最後一個函數是一個回調函數,它不會以你想要的方式返回值。你可以在某處讀到它的工作原理,例如 此处. 您的问题可以通过以下方式解决

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

0
投票

你需要等待回复。

这个简单的答案是把 console.log(result) 内的回调。

或者你可以将 search 办法 承诺:

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

或者用 待机同步:

(async () => {
    try {
        const result = await promise;
        console.log(result);
    } catch (err) {
        console.error(err)
    }
})();
© www.soinside.com 2019 - 2024. All rights reserved.