为什么异步函数对象在首次运行后会失败?

时间:2018-01-20 18:00:36

标签: javascript async-await

我对异步和等待感到困惑。要使用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()

1 个答案:

答案 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);
});