函数将从javascript post / get返回null

JavaScript新手,刚开始阅读关于Callback和Promise的内容。 我只是不明白“等待”的概念,直到我有来自POST / GET请求的值。

更具体地说,为什么不能这样工作?

var token = null;

/
/ var options = {headers, form, etc}
/

function getToken() {

    request(options)
        .then(function (parsedBody) {
            this.token = parsedBody
        })
        .catch(function (err) {
                console.log('POST-Error')
    })

    return token
}

console.log(getToken())

我在nodejs中使用'request-promise'库。 据我所知,当请求被调用时,那么令牌变量将被设置,因为它的承诺,对吧?


这很复杂,我不怪你,你感到困惑。 每个新加入Node的人似乎都对此感到困惑。

你的问题在于变量会被正确地更改 - 只是在console.log()运行时还没有。

当一个函数返回一个承诺时,这意味着将来会发生什么 - 可能是在一瞬间,也许以后,但还没有在该函数返回承诺时。

然后你可以添加履行和拒绝处理程序的承诺 - 这些处理程序将在承诺真正解决时(即有一些数据返回的请求,或有错误)被调用。

所以,你不能写:

console.log(getToken());

你可以写的是:

getToken()
    .then(data => console.log('Data:', data))
    .catch(error => console.log('Error:', error));

但是,只有当你真的从你的函数中返回承诺时:

function getToken() {
    let promise = request(options);
    return promise;
}

现在,您可以使用async关键字并执行如下操作:

async function getToken() {
    let data = await request(options);
    return data;
}

但是这个函数不返回data - 它像前面的例子一样返回一个promise。

记住一件事,你不能从你的功能中返回任何尚不可用的值。 如果您希望在获得某件东西之前返还某些东西,则只能退还承诺。 而且每一个异步函数 - 无论是async function ,显式返回一个promise还是一个接受回调的函数 - 都将在异步操作完成之前返回,而不会阻塞该线程。

欲了解更多详情,请参阅以下答案:

  • 有关如何使用回调和承诺的详细说明
  • 有关如何在复杂的请求处理程序中使用promise的说明
  • 关于AJAX请求的例子,解释了什么是承诺
  • 解释回调,承诺以及如何访问异步返回的数据
  • 链接地址: http://www.djcxy.com/p/55367.html

    上一篇: function will return null from javascript post/get

    下一篇: Promise.all in Node is undefined