如何设置对变量的Promise响应

时间:2019-05-21 03:29:00

标签: javascript typescript promise async-await

我有一个异步函数返回一个值

  async getUsername(env:string,skuName: string,token:string): Promise<any> {
      let value =  await this.getDeviceName(env,skuName,token);
      return value;
  };

在另一个函数中,我正在调用此“获取用户名”函数

let productN;
const prod = this.getUsername(env,skuName,token).then((resp) => {
    productN= resp;
    this.wait(300);
});

变量productN正在工作,因为我能够在日志中看到响应,但是当我尝试在此块之外使用productN时,我遇到了未定义的情况。

 promotion = { 
    name: productN,
    startDate: start,
    endDate: end
 };

我正在尝试将名称设置为productN,但我无法使其正常工作。

有人可以告诉我我做错了吗?谢谢

3 个答案:

答案 0 :(得分:2)

收到回复后,您可以分配给"persistent_menu": [{ "locale": "default", "composer_input_disabled": false, "call_to_actions": [{ "type": "postback", "title": "Quiz me!", "payload": "MENU_QUIZ_ME" }, { "type": "postback", "title": "Help", "payload": "MENU_HELP" } ] }] -

promotion

由于您的const prod = this.getUsername(env,skuName,token).then((resp) => { productN = resp; promotion.name = resp this.wait(300); }); 是异步的,因此可以使用getUsername等待响应,然后将其分配给await对象。

promotion

---编辑---

(async() => {
  const resp = await this.getUsername(env,skuName,token);
  promotion = {
    name: resp,
    startDate: start,
    endDate: end
  } 
})();

答案 1 :(得分:0)

尝试

<table:customData>
            <core:CustomData key="p13nData" value='\{"columnKey": "PROJECT_DEFINITION" , "leadingProperty":"PROJECT_DEFINITION", "type":"string" \}'/>
        </table:customData>

答案 2 :(得分:0)

您可以尝试这样做吗?在getDeviceName中返回您的getUsername函数;

getUsername(env:string, skuName: string, token:string): Promise<any> {
  return this.getDeviceName(env, skuName, token);
};
const productN = await this.getUsername(env, skuName, token);
console.log(productN);

我不知道您为什么使用getUsername。因为您可以直接从productN获得getDeviceName中的值。

喜欢

const productN = await this.getDeviceName(env, skuName, token);

如果您想在getUsername内做其他事情。您可以使其兑现承诺。

getUsername(env:string, skuName: string, token:string): Promise<any> {
 return New Promise(async (resolve,reject)=>{
  try {
   let value =  await this.getDeviceName(env,skuName,token);
   ...
   //all other things you want to do here 
   ...
   resolve(value);
  } catch (error) {
   reject(error)
  }
 }
};

const productN = await this.getUsername(env, skuName, token);
console.log(productN);

nb:我使用try catch块进行错误处理,如果您不愿意,请忽略它。