質問1:私たちはasyn関数でsybschronousコードを実装できますか?
質問2:非同期タスクとして同期を行い、addition()を非同期で動作させるにはどうすればよいですか? async function
が呼び出されると
、それはあなたがasync function
からasync
キーワードを省略した場合、あなたが代わりに約束オブジェクトを返す必要があり、Promiseを返します。たとえば:あなたは上記のmain()
を呼び出す場合
/* async */ function async_fn() {
return Promise.resolve('hello');
}
async function main() {
let msg = await async_fn();
console.log(msg);
}
は、コンソールに「ハロー」メッセージが表示されます。
await
式can only be used inside an async function。したがって、 "async"機能でasync
キーワードを省略すると、 "Promise"を自分で処理する必要があります。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function非同期関数が呼び出される
によれば、プロミスを返します。非同期 関数が値を返すと、プロミスは 戻り値で解決されます。非同期関数が例外または一部の 値をスローすると、スローされた値で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();
}
}
}
MMM、このためには意味を、私はrx.js –
を見てみてください....理解カントが、observable..can使用したくありません私は約束をしていませんか? – Aditya
あなたはあなたのアプリケーションの状態の責任を負わなければなりません。代議員これは神のアイデアではない –