我在lib/helper.js
中写了这段代码
var myfunction = async function(x,y) {
....
return [variableA, variableB]
}
exports.myfunction = myfunction;
然后我尝试在另一个文件中使用它
var helper = require('./helper.js');
var start = function(a,b){
....
const result = await helper.myfunction('test','test');
}
exports.start = start;
我得到一个错误
“等待仅在异步函数中有效”
问题是什么?
当我遇到这个错误时,原来我在“async”函数中调用了map函数,所以这个错误消息实际上是指没有标记为“async”的map函数。我绕过了这个问题,从map函数中调用了“await”,并提出了一些获得预期行为的其他方法。
var myfunction = async function(x,y) {
....
someArray.map(someVariable => { // <- This was the function giving the error
return await someFunction(someVariable);
});
}
要使用wait
,其执行上下文本质上需要是async
正如上面所说的,您需要定义您的执行上下文的性质,在这里您愿意在任何事情之前等待任务。
只需将
async
放在执行async
任务的fn
声明之前。
var start = async function(a, b) {
// Your async task will execute with await
await foo()
console.log('I will execute after foo get either resolved/rejected')
}
解释:
在您的问题中,您正在导入一个
方法
,该方法本质上是异步的
,将并行执行。但是,您尝试执行async
方法的地方位于不同的执行上下文中,您需要定义
async
以使用wait
。
var helper = require('./helper.js');
var start = async function(a,b){
....
const result = await helper.myfunction('test','test');
}
exports.start = start;
想知道引擎盖下发生了什么
await
使用promise/未来/任务返回方法/函数,并且async
将方法/函数标记为能够使用await。
另外,如果您熟悉
promise
,等待
实际上也在执行相同的promise/解决过程。创建promise链并执行resolve
回调中的下一个任务。
有关更多信息,请参阅MDN文档。
错误不是指myfunction
,而是指start
。
async function start() {
....
const result = await helper.myfunction('test', 'test');
}
// My function
const myfunction = async function(x, y) {
return [
x,
y,
];
}
// Start function
const start = async function(a, b) {
const result = await myfunction('test', 'test');
console.log(result);
}
// Call start
start();
问题内容: 我写了这段代码 然后我尝试在另一个文件中使用它 我有一个错误 “等待仅在异步功能中有效” 有什么问题 问题答案: 错误不是指而是。 我利用这个问题的机会来告诉你一个已知的反模式的使用方法:。 错误 正确 另外,要知道有一个正确且重要的特殊情况:(使用try / catch)
我正试图将图像上传到firebase存储,但调用该函数时,未执行wait以获取url。我错过了什么? 看看这个其他主题,我发现问题可能是“然后”,但我如何设置代码以等待url? 异步/等待/然后飞镖/颤振 谢谢
所以我在Angular中开发了一个新组件,在ngOninit中我有以下异步函数。。。 这getUserProfile需要完成才能调用它。getPrivateGroup()和这个。需要先完成getPrivateGroup(),然后才能调用此函数。loadGroupPosts()。我知道我可以在异步请求的回调中编写这些函数,但我想知道是否有一种方法可以将它保存在ngOnInit中以保持其更干净? 有人
问题内容: 我对后端非常熟悉。但是我遇到了一种情况,我必须在前端使用它。 我正在获取对象的数组,并且在那些对象中我获取了位置。现在,我可以获取单个地名,但是我想在map函数中使用该名称来获取地名。因此,正如我们所知道的那样,我必须在那边使用。 这是代码 但是,当我在此处将map函数与async一起使用时,它不会返回任何内容。谁能帮我解决我的问题? 谢谢!!! 问题答案: 您应该始终将获取数据等关注
问题内容: 目前,我正在尝试在类构造函数中使用。这样一来,我就可以为正在从事的Electron项目获取自定义标签。 但是,目前该项目无法正常工作,并出现以下错误: 有没有办法避免这种情况,以便我可以在其中使用异步/等待?而不需要回调或.then()? 问题答案: 这 永远 行不通。 该关键字允许在标记为函数中使用,但它也是功能转换成一个承诺发生器。因此,标有的函数将返回承诺。另一方面,构造函数返回
我试图利用es7异步功能,即。 在这里,所有promise*函数都进行ajax调用,并返回或如果ajax响应满足传递的参数,我相信我不能连续使用3个等待,因此需要一种方法来等待所有这些调用以某种方式返回它们的值。