问题1:我们可以在asyn函数中实现sybschronous代码吗?
的原因。
问题2:如何使异步任务同步为异步任务,以便add()可以异步工作?
当async function
被调用时,它返回一个Promise,如果省略从async function
async
关键字,你应该返回一个承诺对象,而不是。例如:
/* async */ function async_fn() {
return Promise.resolve('hello');
}
async function main() {
let msg = await async_fn();
console.log(msg);
}
如果在上面打电话main()
,你会在控制台得到消息“你好”。
the await
expression can only be used inside an async function。所以如果你在“异步”功能中省略了async
关键字,你应该自己处理“Promise”。
根据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();
}
}
}
嗯,没有任何意义对于这一点,我无法理解....尝试看看rx.js –
但不想使用observable..can我没有兑现承诺吗? – Aditya
你必须负责你的应用程序的状态。代表这不是一个上帝的想法 –