我的自定义模块具有以下代码:
module.exports.PrintNearestStore = async function PrintNearestStore(session, lat, lon) {
...
}
如果在我的模块外调用函数,效果很好,但是如果在模块内调用,则在运行时出现错误:
(节点: 24372)UnhandledPromiseRejse警告:未处理的promise拒绝(拒绝id: 1):引用错误:未定义PrintNearestStore
当我将语法更改为:
module.exports.PrintNearestStore = PrintNearestStore;
var PrintNearestStore = async function(session, lat, lon) {
}
它开始在模块内正常工作,但在模块外失败-我得到了错误:
(节点: 32422)UnhandledPromiseRejse警告:未处理的promise拒绝(拒绝id: 1): TypeError: my模块。PrintNearestStore不是一个函数
所以我将代码更改为:
module.exports.PrintNearestStore = async function(session, lat, lon) {
await PrintNearestStore(session, lat, lon);
}
var PrintNearestStore = async function(session, lat, lon) {
...
}
现在它在所有情况下都有效:内部和外部。然而,想了解语义学,如果有更美丽和更短的方法来写呢?如何正确定义和使用异步函数:内部和外部(导出)模块?
export let handlePostStore = async (data) => {
console.log('post');
return data;
};
// to import
import { handlePostStore } from 'your_path_here';
// to call it
handlePostStore(data)
第一种情况下出错:PrintNearestStore
-函数表达式,因此此名称在外部不可用。
第二种情况下出错:使用变量,而不是函数声明。在本例中,变量PrintNearestStore的声明被挂起,因此,您可以在第var printnearestore=
,但在这种情况下,值将是未定义的。
所以,最简单的解决方案将第二个变量更改为:
module.exports.PrintNearestStore = PrintNearestStore;
async function PrintNearestStore(session, lat, lon) {
}
这与异步函数没有什么特别的关系。如果你想在内部调用一个函数并导出它,首先定义它,然后导出它。
async function doStuff() {
// ...
}
// doStuff is defined inside the module so we can call it wherever we want
// Export it to make it available outside
module.exports.doStuff = doStuff;
解释您尝试的问题:
module.exports.PrintNearestStore = async function PrintNearestStore(session, lat, lon) {
...
}
这不会在模块中定义函数。函数定义是一个函数表达式。函数表达式的名称仅在函数本身内部创建变量。更简单的例子:
js prettyprint-override">var foo = function bar() {
console.log(typeof bar); // 'function' - works
};
foo();
console.log(typeof foo); // 'function' - works
console.log(typeof bar); // 'undefined' - there is no such variable `bar`
我有以下代码,这是通过Express调用的API。我需要返回一个引号数组,以及与这些引号相关联的部分数组。为此,我使用async/wait,它在我的引号变量中正常工作,但我在部件变量中得到一个空数组。 我相信这与部分结果是挂起的promise有关,因为当我在循环中记录我的结果时,我得到了适当的值。 我怀疑我一定是误解了async/await是如何工作的,或者promises/Promise是如何工
我已经为更新的节点版本编写了代码,我希望将其实现为谷歌云功能(GCF)。现在的问题是GCF只提供节点v6.14.0引擎,不支持异步功能。 我喜欢的解决方案是使用https://www.npmjs.com/package/asyncawait,因为我不需要做重大更改(当我后来希望在新的节点可用时使用本机异步时也同样适用)。然而,我无法运行我的代码,即使我相信我已经正确地遵循了转换中的示例。 如果我按
问题内容: 我正在使用GraphicsMagick作为节点。我基本上是裁剪照片并检索用户上传的照片的exif数据。我不想阻塞等待这些任务完成的请求流,因此我需要使用异步函数来做到这一点。而且我认为我应该能够这样做,因为这些是node.js本身进行异步的I / O操作。 但是,正如我所见,GraphicsMagick中节点的所有功能都是同步功能。因此,我无法确定如何实现所需的功能。 我想到的一个想法
我正在尝试使用节点版本6.2.1与我的一些代码。计划将大多数面向超回调的代码迁移到看起来更干净、性能更好的代码。 我不知道为什么,当我试图执行节点代码时,终端抛出了一个错误。 你好。js 日志- 我错过了什么?请给我一些同样的灯。 更新1: 我试着按照昆汀的建议使用巴贝尔,但是,我仍然得到以下错误。 更新代码- 日志-
问题内容: 我认为节点7.4支持异步/等待,但是此示例不起作用: 结果是: 如何在节点7.4上使用异步/等待? 问题答案: 是的,Node.js v7支持async-await,但将其锁定在标志后面。尚未准备就绪的功能不在此标记后面。 要在Node.js v7中使用async-await,只需使用此标志运行Node服务- async-await的正式发行版预定于4月启动的Node.js v8。 您
我以为async/wait在节点7.4中得到了支持,但是这个例子不起作用: 结果: 如何在node 7.4中使用async/await?