我对异步和等待感到困惑。要使用await,它应该是一个异步函数,好吧,但那么第一个将如何开始?
我有一个异步功能,它内部有等待链。当我刷新它运行时,我可以看到对象值,但后来它们消失了。 getMyValues是我的功能,问题是;当我调试时,我可以看到对象及其值,但是当我想稍后使用它时它会消失,只有我可以使用我从它们获得的字符串,即使它们有时会消失。
所以,我几乎没有问题; Q1)为什么对象变得不确定?我知道javascript对象是动态的,但我看到问题,即使我做了一个深度克隆。如何同一会话再次工作,甚至该会话对象变得未定义..
async function getMyValues() {
// Initialize a session.
var session = await myclass.createSession(5)
var myValues = session.getValues()
我这样跑;
getMyValues()
Q2)如果我在该函数内部返回并运行,我可以在debug中看到一个promise。如何从这些函数中正确返回一个值?
让myvals = getMyValues()
答案 0 :(得分:0)
您的功能基本上会被重写为(假设您从myValues
返回getMyValues()
):
function getMyValues() {
return new Promise(resolve => {
// Initialize a session.
myclass.createSession(5)
.then(session => {
var myValues = session.getValues()
resolve(myValues);
});
});
}
现在,getMyValues()
会返回承诺,因此您也需要异步处理。 (在该函数上使用.then()
或await
:
getMyValues().then(values => {
console.log('All the boys in the yard like these values: ', values);
});