[英]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.