2017-10-17 14 views
0
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:syynchronousコードをasyn関数で実装できますか?どのように同期タスクを非同期にするのですか?

質問2:どうすれば非同期タスクとして同期を行い、addition()を非同期で動作させることができますか?

注:同じ機能でタスクを実行する必要があります。

+0

MMM、このためには意味を、私はrx.js –

+0

を見てみてください....理解カントが、observable..can使用したくありません私は約束をしていませんか? – Aditya

+0

あなたはあなたのアプリケーションの状態の責任を負わなければなりません。代議員これは神のアイデアではない –

答えて

0

質問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); 
} 

は、コンソールに「ハロー」メッセージが表示されます。

awaitcan 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(); 
     } 
    } 
} 
関連する問題