如何在 Javascript 中使用异步等待函数对象?
Posted
技术标签:
【中文标题】如何在 Javascript 中使用异步等待函数对象?【英文标题】:How to use async await function object in Javascript? 【发布时间】:2016-03-16 14:45:49 【问题描述】:假设我有一个函数对象-
setObj : function(a,b)
obj.a = a;
obj.b = b;
如果我必须在这个函数对象上使用 async & await,我该怎么做?
如果同样写在function(函数方式)中,说-
async function setObj(a,b)
obj.a = a;
obj.b = b;
await setObj(2,3);
这很好用。但是,如果是函数对象,我该怎么做呢?
【问题讨论】:
【参考方案1】:在对象的属性中使用相同的 async
关键字:
(async function ()
var obj = ;
console.log("hello");
let setObj = async function (a,b)
obj.a = a;
obj.b = b;
;
await setObj(2,3);
console.log(obj.a+obj.b);
)();
请注意,整个代码都包装在一个异步自调用函数中。这是必需的,否则await setObj
将无法正常运行。
【讨论】:
我试过这种方法,我得到一个错误,说缺少分号。看看我的代码-gist.github.com/bozzmob/f5ef1c0eff9d7e7f853d setObj 是对象内部的属性吗?例如:let someFunctions = setObj: async function (a, b) ...;。您的代码不会按要点运行,因为您在对象之外使用冒号。或者,您可以让 setObj = async function (a, b) ...; 请检查同一链接上的“更新 1”(gist.github.com/bozzmob/f5ef1c0eff9d7e7f853d) 仍然面临同样的问题。 还有“更新 2”。我已经尝试了您所说的两种解决方案。请问您可以在此处使用有效的解决方案更新您当前的答案吗?【参考方案2】:如果我正确理解您的问题,您可以在方法声明前使用async
关键字:
let obj = ;
let myObj =
async setObj(a,b)
obj.a = a;
obj.b = b;
见http://tc39.github.io/ecmascript-asyncawait/#async-methods
更新
您不能在异步函数之外使用await
。为了使用它,您必须将该调用包装到await setObj(2, 3)
:
async function consoleLog()
await myObj.setObj(2, 3);
console.log(obj.a + obj.b);
consoleLog();
【讨论】:
它说缺少 : 在属性 id 之后。这是我尝试过的-gist.github.com/bozzmob/a36f0d28310df88f0a5d 在您的 Gist 中,将async
关键字移到 ":" 之后的 "function" 前面
在您的 Gist 中查看我的 cmets,您使用的“await”关键字错误,它必须在异步函数中。
请查看要点中的“更新 1”。我在进行更改时收到以下错误 - SyntaxError: missing after property list.
你可以使用 Babel REPL 来试试这个,我已经为你设置好了:tinyurl.com/zzvrzmv【参考方案3】:
您可以简单地将async
关键字放在任何函数上,不仅是函数声明,还包括函数表达式和对象的方法。例如:
作为对象的方法:
const Object =
async asyncFunction()
await MyExamplepromise
作为变量:
const myFunc = async function () await MyExamplepromise
// this is how execute the function expression
// first () operator to execute, and use .then get access the resolved value
myFunc().then((val) => console.log(val) )
还要注意异步函数返回一个承诺,该承诺将使用异步函数返回的值解析,或者被异步函数中抛出的未捕获异常拒绝。
【讨论】:
【参考方案4】:使用箭头函数也可以
const myObject =
myFunc: async () =>
await myResultHere
使用这个:由于该函数是一个异步函数,它将异步运行。如果你想用 await 运行它,你必须在异步函数中使用它
const useFunc = async () =>
const res = await myObject.myfunc();
【讨论】:
以上是关于如何在 Javascript 中使用异步等待函数对象?的主要内容,如果未能解决你的问题,请参考以下文章