Javascript 请求承诺不返回值(节点JS)

Javascript 请求承诺不返回值(节点JS),javascript,node.js,promise,request,Javascript,Node.js,Promise,Request,我一直在努力让这个工作,而现在,我的请求承诺是不会返回它找到的拖缆。当我在控制台.log(拖缆)中运行时,请求的一部分就会工作。有什么想法吗 function getStreamerByName(name){ var streamer; var options = { url: "https://api.twitch.tv/helix/users?login=" + name, method: 'GET', headers: { 'Client-ID'

我一直在努力让这个工作,而现在,我的请求承诺是不会返回它找到的拖缆。当我在控制台.log(拖缆)中运行时,请求的一部分就会工作。有什么想法吗

function getStreamerByName(name){
var streamer;
var options = {  
    url: "https://api.twitch.tv/helix/users?login=" + name,
    method: 'GET',
    headers: {
        'Client-ID': 'CLIENT_ID',
    }
};
requestP(options)
//SPREAD
    .spread(function(res, body) {
        streamer_data = JSON.parse(body);
    })
//THEN
    .then(function (body) {
        streamer = ({
            twitch_id: streamer_data["data"][0]["id"],
            name: streamer_data["data"][0]["display_name"],
            image: streamer_data["data"][0]["profile_image_url"],
            description: streamer_data["data"][0]["description"]
        });
        Streamer.create(streamer);
        return streamer;
    })
//CATCH
    .catch(function (err) {
        console.log(err);
        return streamer;
    });
}

您需要返回承诺链:

function getStreamerByName(name){
var streamer;
var options = {  
    url: "https://api.twitch.tv/helix/users?login=" + name,
    method: 'GET',
    headers: {
        'Client-ID': 'CLIENT_ID',
    }
};
//A return was added here
return requestP(options)
//SPREAD
    .spread(function(res, body) {
        streamer_data = JSON.parse(body);
    })
//THEN
    .then(function (body) {
        streamer = ({
            twitch_id: streamer_data["data"][0]["id"],
            name: streamer_data["data"][0]["display_name"],
            image: streamer_data["data"][0]["profile_image_url"],
            description: streamer_data["data"][0]["description"]
        });
        Streamer.create(streamer);
        return streamer;
    })
//CATCH
    .catch(function (err) {
        console.log(err);
        return streamer;
    });
}
在外部调用此函数时,还需要使用.then()获取结果,或者使用异步函数并等待

所以


我不确定这是否是你的意思,但我只是尝试了一下,它没有得到拖缆仍然,它会出现一个错误消息说: TypeError:无法读取未定义的属性“then”

function getStreamers() {
            getStreamerByName(search).then((streamer) => {
                console.log(streamer)
            })
        }
getStreamers();

“当我在控制台中运行.log(拖缆)时,请求的一部分就会工作”-为什么不这样做呢?是的,您不能在
then
回调之外使用
streamer
,因为该代码将在承诺尚未实现时执行,只是尝试将我的代码放入其中,但它不起作用,它说“SyntaxError:意外令牌函数”请编辑您的答案,添加代码如何工作以及如何解决OP问题的解释。许多SO海报都是新手,不会理解您发布的代码,特别是如果他们将您的解决方案剪切粘贴到现有代码中。您是否修改了getStreamerByName以返回承诺?没有,但我正在尝试返回拖缆而不是承诺您不能。你总是要回报一个承诺。如果不想返回承诺并直接使用它,则需要使用async/await构造。你是救命恩人!
caller() {
    getStreamerByName('stuff').then((result) => { //do stuff })
}
function getStreamers() {
            getStreamerByName(search).then((streamer) => {
                console.log(streamer)
            })
        }
getStreamers();
async function getStreamerByName (name) {
    return new Promise(function (resolve, reject) {
        Your code
   });
}

Var myStreamer = getStreamerByName ('myStreamer');