3

私はこの素晴らしい同期モジュール synchronize.js を使用しています - http://alexeypetrushin.github.io/synchronize/docs/index.html

同期された関数の戻り値をファイバーの外側のスコープに取得する必要がある状況に遭遇しました。これが私が話していることの基本的な例です:

var records = sync.fiber(function() {
  var results = ... // some synchronized function
  return results;
});

一方records、理論的にはresults、ファイバー スコープ内の from の値が含まれます。私は先物(ファイバー/先物モジュール)とそれらがこの状況でどのように使用されるかについて調べてきましたが、まだ機能に近いものを思い付いていません. 方向性および/または解決策が欲しいです。

編集:

私が達成しようとしていることのより完全な例については:

  // executes a stored procedure/function
exec: function (statement, parameters) {

    init();

    var request = new sql.Request(),
        results; 

    processParams(parameters, request);

    var res = sync.fiber(function(){

        try {
            var result = sync.await(request.execute(statement, sync.defers('recordsets', 'returnValue')));

            results = result.recordsets.length > 0 ? result.recordsets[0] : [];

            return results;
        }
        catch (e) {
            console.log('error:connection:exec(): ' + e);
            throw(e);
        }

    });

    // though typical scope rules would mean that `results` has a 
    // value here, it's actually undefined.

    // in theory, `res` would contain the return value from the `sync.fiber` callback
    // which is our result set.
    return res;
}

ここでわかるように、私が達成したいことはresults、ファイバーのスコープからプライマリ スコープの値を取得することです。

4

2 に答える 2

2

現在はサポートされています。次のフォームを使用してください

var records = sync.fiber(function() {
  var results = ... // some synchronized function
  return results;
}, function(err, results){... /* do something with results */});
于 2014-06-12T10:38:25.583 に答える