簡體   English   中英

如何設置對變量的Promise響應

[英]How do i set the response of a promise to a variable

我有一個異步函數返回一個值

  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,但我無法使其正常工作。

有人可以向我解釋我做錯了嗎? 謝謝

您可以在收到回復后分配給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
  } 
})();

-編輯-

 const input = [ { env: 'lorem', skuname: 'skuname1', token: 'dummy' }, { env: 'lorem', skuname: 'skuname2', token: 'dummy' } ]; const getUserName = (username) => { return new Promise(resolve => { setTimeout(()=>resolve(username), 2000); }); }; (async () => { const resp = await Promise.all(input.map(({skuname}) => getUserName(skuname))); console.log(resp); })(); // Or Promise.all(input.map(({skuname}) => getUserName(skuname))) .then(resp => { console.log(resp); }); 

嘗試

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

你可以嘗試這樣做嗎? getUsername返回您的getDeviceName函數;

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塊進行錯誤處理,如果不想,請忽略它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM