2017-11-23 12 views
0

プロセス待つ:JS非同期待機しないといないブロック私はこのような何かacheiveしたい

:2

私はこれを試してみました前

setTimeout(function() { 
    console.log("1"); 
}, 3000); 

console.log("2"); 

そして、私は1を望んでログインします

async function a() { 
    var v = await setTimeout(function() { 
    console.log("1"); 
    }, 3000); 
    console.log("2"); 
} 

a(); 

さらに多くのことを試しましたが、何も動作しません。 1つのことが完了するまでJSをWAITにする方法を教えてください。次に次のことに進みます。 PROMISEを使用しないでください!

ありがとうございました。

+0

約束を使用していますか?しかし、あなたは 'async/await'を使いたいですか?ハァッ? – nmfzone

+0

待っていた表現が約束でないなら、それは約束なしにはできません。 –

+0

awaitとasyncはpromiceなしでは動作できません。 –

答えて

3

約束なしでawait/asyncを使用する方法はありません。機能性全体は約束に基づいています。時には、それは約束なしで動作するように見えるかもしれませんが、それは他の機能が約束を返すためだけです。

あなたができることは、約束を返す単純な待機関数を作成してawaitです。たとえば、次のように

wait = (time) => new Promise(resolve => setTimeout(resolve, time)) 
 

 
async function test(){ 
 
    console.log("one") 
 
    // Pause 
 
    await wait(2000) 
 
    // continue 
 
    console.log("two") 
 
} 
 

 
test()

イベントループを中断して待ちますJavaScriptで何も(あなたが使用してする必要があること)はありません。 JSを書くことの一部は、この事実を扱うことを学んでいます。

+0

awaitを約束したり、何とか使うことができます: 'async function(){let c = await 1; return c} '、opの例では' timeoutId'(setTimeoutが返すもの)の値を返します。 –

+1

@JoseHermosillaRodrigoもちろん、同期戻りを待つことができますが、OPが望むものではありません。これを行うことができれば、OPが約束を使わずに求めていることをする方法を示す回答を追加してください。 –

+0

私はできないと思います。 XD私はOPの例で起こる動作を指していました。 (同期値を待つ)。もちろん、非同期を待つ必要がある場合は、式は約束でなければなりません。それは明らかにするためだけだった。 –

0

setTimeoutPromiseを返さないため、コードが機能しません。ここでは、実際に約束を返し、あなたがやりたいこと実現少しヘルパー関数があります:

const sleep = ms => new Promise(res => setTimeout(res, ms)); 

はこのようにそれを使用します。

async function a() { 
    await sleep(3000); 
    console.log("1"); 
    console.log("2"); 
} 

a(); 

これは3000ミリ秒、ログ"1"、その後"2"を待ちます。なぜ何かが起こる前に待たなければならない理由はありませんが、実際にPromisesを使用するようにコードを翻訳しただけです。

+0

私は待つ必要はありません、setTimeout関数はちょうど例です。リモートサーバーは、それが戻った後で、別のことをしたい。とにかくありがとう。 – Raz

+0

[request-promise-native](https://github.com/request/request-promise-native)のようなPromise互換のHTTPライブラリを使用するだけです。 –