【问题标题】:How To Use Return Of Async Function In Scope [duplicate]如何在范围内使用异步函数的返回[重复]
【发布时间】:2021-01-24 17:26:49
【问题描述】:

简介

所以我是 JavaScript 新手,我想知道如何在不使用 .then 或其他任何类型的情况下使用异步函数的返回(如果没有,那么是否可以以我的方式使用它?可以访问 signupData() 函数范围内的返回值)。因此,我使用 ECIES 方案加密事物,使用 Secp256k1 密钥发送到 API 以供以后使用,但是,我认为帖子中 encryptMes 部分下的 .encrypt 调用了一个承诺。下面是相关代码:

signup.html

       <form id="login-form" name ="signup-form">
            <input class="login-form-field" type="text" name="user" placeholder="username">
            <input class="login-form-field" type="text" name="email" placeholder="email">
            <input class="login-form-field" type="password" name="dob" placeholder="date of birth">
            <br>
            <!--<button class="actionButton"></button>-->
            <INPUT TYPE="button" class="button-success" NAME="button" Value="sign up" onClick="signupData(this.form)">
              <br>
              <div class="signup">
              <a href="login.html">login</a>
              </div>
        </form>
  function signupData(form) //add to this script
    {
      console.log("signup data is starting");
      var user = form.user.value;
      var email = form.email.value;
      var dob = form.dob.value;

      console.log("checkpoint: 1");

      genSKey();

      console.log("checkpoint: 2");

      console.log("checkpoint: 3");

      var enUser = encryptMes(user); //why does this invoke a promise?
    
      var enDOB = encryptMes(dob);

      var data = {name:"LifeNet", members:{}} //you added members to the same area in the object so it is always replacing members since it's the field of data

      data.members[enUser] = {profilePic:{},enDOB, listeners:{}, listening:{}, friends:{}, requested:{}, blocked:{}, channel:false}

      console.log("checkpoint: 3");

      console.log({data});

      apiPost({data});
      //pass the signup function in here

      //hash the variables and send to celox network
      //console.log(JSON.stringify({data}));
      //alert (`copy and save your Private Key to somewhere safe: ${skey}`);
      //window.location.href= "login.html";
    }

encryptMes 函数:

window.encryptMes = async function(data)
{
    //for this you need to get the sender's public key to encrypt the message
    console.log("encryptmes: began");
    var pkey = genPKey();

    if (pkey === null || undefined) 
    {
      
      console.log('You do not have a key pair');

    }

    var encryptedMes = await eccrypto.encrypt(pkey, Buffer.from(data));

    var enMes = encryptedMes.toString('hex');

    console.log(encryptedMes); //could be this since it is not stringified when it goes into celox network
    console.log(enMes);

    return enMes;
}

重点:如何在没有“.then”的情况下访问异步函数encryptMes的返回,以便在html文件中的signupData()函数范围内使用它?

【问题讨论】:

  • "使用异步函数的返回值而不使用 .then 或任何类似的东西(如果可能的话)" - 不,这是不可能的。只需将signupData 标记为async,以便您可以await encryptMes 调用
  • 顺便说一句,您可能还想在重新加载页面之前等待apiPost() 请求。并确保防止表单提交事件的默认操作。

标签: javascript html node.js asynchronous promise


【解决方案1】:

如果您的 signupData 函数也是异步的,那么您可以使用 await 关键字 variable = await asyncfunct(params)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-23
    • 2018-07-09
    • 2019-08-21
    • 2021-02-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多