【问题标题】:NodeJS Function return statement [duplicate]NodeJS函数返回语句[重复]
【发布时间】:2016-09-04 13:29:12
【问题描述】:

我有这个if函数,

if (shorturl) {
 ...
    link.shorten({longUrl:"http://google.com"}, function(err, results) {
       return results;
    });
return results;
}

现在,我希望第二个 return 语句接收“结果”的值。相反,我得到“ReferenceError:未定义结果”。

帮我嵌套返回/回调。

参考:
我正在尝试在函数中使用http://github.com/nkirby/node-bitlyapi 来获取短网址

【问题讨论】:

  • results 的范围仅限于回调函数中。你不能在外面访问它。
  • 我知道错误的原因。我想知道如何在外面访问它?

标签: javascript node.js function return


【解决方案1】:

我假设您在第二个 return results; 行中遇到了错误。

这看起来像异步代码(使用回调来稍后执行部分代码),所以你不能只从它返回一个值并期望它在同一个执行帧中可用。

处理您的情况的最佳方法可能是在回调本身内执行其余代码。

【讨论】:

    【解决方案2】:

    您不能这样做,因为 link.shorten 是异步的,这就是您为其提供回调函数的原因。在评估第二次返回时,结果未定义,因为对 link.shorten 函数的调用尚未返回。

    您应该等待回调,然后才返回结果,或者您可以使用 Promise 并为结果返回 Promise。 (node 有几个不同的 Promise 库)。

    https://howtonode.org/promises

    【讨论】:

    • 谢谢。当您说“等待回调”时 - 这是什么意思?我在第一个结果中有正确的答案。现在,我怎样才能将它移到 link.shorten 的范围之外?
    • 你不能,因为当你得到结果时你已经执行了第二次返回。您需要相应地规划您的代码。要么通过回调异步返回结果,要么从函数返回 Promise 而不是结果本身。如果您发布调用代码,我可能会提供更多帮助。
    • 我正在尝试在函数中使用github.com/nkirby/node-bitlyapi 来获取短网址。
    • 那么在调用 Bitly.shorten 时,您应该执行以下操作:function GetUrl(callback) { if (shortUrl) { link.shorten({longUrl:"http://google.com"}, function(err, results) { return callback(err, results); }); } else { return callback(null, results); }
    猜你喜欢
    • 2016-12-20
    • 2018-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-26
    • 2021-09-27
    • 2020-05-28
    • 2014-09-22
    相关资源
    最近更新 更多