Javascript Cognito了解异步并等待吗?

时间:2019-04-26 15:31:49

标签: javascript asynchronous async-await amazon-cognito

我正在调用此函数以检索用户属性,但是,当我测试该函数时,返回结果始终为“ test”,然后它通过“ cognitoUser.getUserAttributes”并记录实际结果。我不知道为什么,但是似乎最初会跳过“ cognitoUser.getUserAttributes”。

运行时,它会打印出测试结果,而不是实际结果

有什么想法吗?

function retrieveattribute(e) {
  var ans = "test";
  var e = "custom:InstanceID_1";
  cognitoUser.getUserAttributes(function(err, result) {
    if (err) {
      alert(err);
      return;
    }
    for (i = 0; i < result.length; i++) {
      if (result[i].getName() == e) {
        ans = result[i].getValue();
        console.log(ans);
        return ans;
      }
    }
  });
  return ans;
}

1 个答案:

答案 0 :(得分:0)

对于启动“异步代码”,您需要包装功能以保证:

function retrieveattribute(e) {
    return new Promise(function(res) {
        var ans = "test";
        var e = "custom:InstanceID_1";

        cognitoUser.getUserAttributes(function(err, result) {
            if (err) {
                alert(err);
                return;
            }
            for (i = 0; i < result.length; i++) {
                if (result[i].getName() == e) {
                    ans = result[i].getValue();
                    console.log(ans);
                    res(ans);
                }
            }
        });
    })
}

之后,您可以用作保证:

   retrieveattribute(e).then(t => console.log(t))

或在异步功能中等待它:

   await retrieveattribute(e)