Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 发电机运行后继续运行的正确方法_Javascript_Generator_Promise - Fatal编程技术网

Javascript 发电机运行后继续运行的正确方法

Javascript 发电机运行后继续运行的正确方法,javascript,generator,promise,Javascript,Generator,Promise,我有以下发电机功能: BulkLoader.prototype.load = function(password) { var self = this; return async(function * () { try { self.users = yield getJSON('/users'); self.contacts = yield getJSON('/contacts'); self.companies = yield getJSO

我有以下发电机功能:

BulkLoader.prototype.load = function(password) {
  var self = this;

  return async(function * () {
    try {
      self.users = yield getJSON('/users');
      self.contacts = yield getJSON('/contacts');
      self.companies = yield getJSON('/companies');

      return self;
    } catch (err) {
      throw err;
    }
  });
};
asyc
方法如下所示,我从Q库中获取:

export default function async(generatorFunc) {
  function continuer(verb, arg) {
    var result;
    try {
      result = generator[verb](arg);
    } catch (err) {
      return RSVP.Promise.reject(err);
    }
    if (result.done) {
      return result.value;
    } else {
      return RSVP.Promise.resolve(result.value).then(callback, errback);
    }
  }

  var generator = generatorFunc();
  var callback = continuer.bind(continuer, "next");
  var errback = continuer.bind(continuer, "throw");

  return callback();
}
我的呼叫代码如下所示:

var bulkLoader = new GeneratorBulkLoader();

bulkLoader.load()
  .then(render)
  .catch(errorHandler);
调用生成器函数后,必须使用承诺,这似乎有点奇怪

当使用生成器时,其他人如何处理他们的调用代码

调用生成器函数后,必须使用承诺,这似乎有点奇怪

为什么??API仍然是一个承诺。它是否在内部使用了发电机并没有什么区别

当使用生成器时,其他人如何处理他们的调用代码

您也可以始终使用生成器添加调用代码:

async(function* () {
    var bulkLoader = new GeneratorBulkLoader();

    try {
        yield render(yield bulkLoader.load())
    } catch(e) {
        errorHandler(e);
    }
});

那么,您希望如何使用生成器函数?为什么在包含使用RSVP的Q代码时会标记此函数?具有讽刺意味的是,带有承诺的调用代码明显更清晰(实际上,被调用方代码也会更清晰,并且通过简单的返回
Promise.all(…)