[英]how do make synchronous task as asynchronous?
class some{
let result;
function asyn addition(){
if (this.result != 'addition'){ //synchronous
return this.result;
}
else
result = await do some asynchronous task; // asynchronous promise using some third party lib.
return result;
}
}
}
問題1 :我們可以在asyn函數中實現同步代碼嗎?
問題2:如何將同步作為異步任務,以便adding()可以異步工作?
注意:我只需要在同一功能中執行任務。
問題1:我們可以在asyn函數中實現同步代碼嗎?
原因。
問題2:如何將同步作為異步任務,以便adding()可以異步工作?
調用async function
,它將返回Promise ,如果您從async function
省略async
關鍵字,則應改為返回Promise對象。 例如:
/* async */ function async_fn() {
return Promise.resolve('hello');
}
async function main() {
let msg = await async_fn();
console.log(msg);
}
如果您在上方調用main()
,則會在控制台中收到消息“ hello”。
await
表達式只能在異步函數中使用 。 因此,如果您在“異步”函數中省略了async
關鍵字,則您應該自己處理“承諾”。
根據https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Statements/async_function
調用異步函數時,它將返回一個Promise。 當異步函數返回值時,Promise將使用返回的值進行解析。 當異步函數拋出異常或某個值時,Promise將被拋出的值拒絕。
因此您的代碼在技術上等於:
function async_function() {
return Promise.resolve('hello world');
}
class some {
result;
addition() {
if (this.result != 'addition') { //synchronous
return Promise.resolve(this.result);
} else {
return new Promise(function (resolve, reject) {
async_function().then(function (result) {
resolve(result); // Promise resolve here (normal return)
}).catch(function (err) {
reject(err); // Promise reject (throw error)
});
});
}
}
}
並且由於async_function()
返回類型也是Promise
,因此,如果您不打算在方法addition()
操縱其result
,則可以使此函數更簡單:
class some {
result;
addition() {
if (this.result != 'addition') { //synchronous
return Promise.resolve(this.result);
} else {
return async_function();
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.