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来自光纤范围内的值。我一直在阅读期货(纤维/期货模块)以及如何在这种情况下使用它们,但我还没有想出任何接近工作的东西。我想要一些方向和/或解决方案。

编辑:

有关我希望完成的更详尽的示例:

  // 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 回答
0

这不是范围问题。这不会起作用,因为return res;在光纤返回之前执行。这就是它的原因undefined

您需要重写您的exec函数以进行回调。exec然后你可以在函数本身上使用 synchronize.js 。

于 2014-04-19T18:16:19.623 回答