2

おそらく以前に尋ねられましたが、真剣に検索した後でも、適切な解決策を見つけることができません。次のようなことを考えてください:

function compute() {
  asyncCall(args, function(err, result) {
  });
  /* 'join thread here' */
}

非同期ですが、関数から同期的に使用して返しasyncCallたいと思います。はライブラリ呼び出しであり、変更することはできません。resultcomputeasyncCall

条件変数を監視せずsetTimeoutに非同期の結果を適切に待つ方法は? これは可能ですが、最適ではありません。

4

2 に答える 2

1

awaitブラウザには、広く利用できる構文はありません。オプションは通常、Callback パターンまたは Promise に限定されます。

NodeJS は、ほとんどの非同期メソッドのコールバック パターンに従います。

function someAsyncMethod(options, callback) {
  //callback = function(error, data)
  // when there is an error, it is the first parameter, otherwise use null
  doSomethingAsync(function(){
    callback(null, response);
  });
}

....
someAsyncMethod({...}, function(err, data) {
  if (err) return alert("OMG! FAilZ!");

  // use data
});

別の一般的な実装は、jQuery の .ajax()メソッドなどの promise です...

var px = $.ajax({...});
px.data(function(data, xhr, status){
  //runs when data returns.
});
px.fail(function(err,xhr, status){
  //runs when an error occurs
});

約束は出来事に似ています...

上記の 2 つの方法のうち、コールバック構文は実装と従うのが簡単になる傾向がありますが、これを克服するためにasyncのようなユーティリティ パターンを使用できますが、コールバック ツリーが深くネストされる可能性があります。

于 2013-06-07T22:22:12.560 に答える