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函数中实现sybschronous代码吗?
问题2:如何将同步作为异步任务,以便add()可以异步工作?
注意:我必须在同一个功能中完成任务。
答案 0 :(得分:0)
问题1:我们可以在asyn函数中实现sybschronous代码吗?
原因。
问题2:如何将同步作为异步任务,以便add()可以异步工作?
当调用async function
时,它会返回Promise,如果忽略async
中的async function
关键字,则应返回Promise对象。例如:
/* async */ function async_fn() {
return Promise.resolve('hello');
}
async function main() {
let msg = await async_fn();
console.log(msg);
}
如果您拨打上面的main()
,您将在控制台中收到“hello”消息。
await
表达式can only be used inside an async function。因此,如果在“异步”函数中省略async
关键字,则应自行处理“承诺”。
根据https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function
当调用异步函数时,它返回一个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
,如果您不打算在方法result
中操纵其addition()
,则可以使此函数更简单:
class some {
result;
addition() {
if (this.result != 'addition') { //synchronous
return Promise.resolve(this.result);
} else {
return async_function();
}
}
}