【问题标题】:How to deal with returns in async javascript when callbacks are not an option?当回调不是一个选项时,如何处理异步 javascript 中的返回?
【发布时间】:2016-01-06 07:06:10
【问题描述】:

当然,有很多异步问题和答案。但我的问题是关于我需要返回一些东西的异步情况。

我在 node express 中有这个:

app.use('/', FalcorServer.dataSourceRoute(function(req, res) {
         return new someClass('SOMEHOST', req.query.paths);
}));

现在我的问题是,someClass 由于 AJAX 是异步的。 (在我的示例中,我使用 setTimeout 来说明我的观点)。

类似这样的:

class someClass {
    constructor(redisHost, pathString) {
        return setTimeout(function(){
            return someModel;
        }, 1500);
    }
}

module.
    exports = someClass;

但是我必须在我的app.use 中处理这个返回,我该怎么做呢?

【问题讨论】:

  • 把你的头撞到墙上,因为没有回调,异步代码不会很好地工作(读作“根本”)。
  • 我猜你见过this question。答案仍然是一样的——你仍然需要调整你的代码来使用回调。也许您的构造函数返回一个以回调为参数的函数,而正是该函数调用了setTimeout
  • 好的,谢谢,有什么提示或方向可以找到解决方案吗?
  • 你可以稍微重构一下。您可以 first 进行 AJAX 调用,然后在回调中调用 app.use

标签: javascript node.js iojs


【解决方案1】:

我认为你需要调整你的想法...... app.use 进入回调。在不完全了解您的问题的所有详细信息的情况下,我认为这可能会对您有所帮助。

function someClass(a, b, callback) {
  return setTimeout(function(){
    callback(a+b);
  }, 1500);
}

new someClass(1, 2, function(response) {
  console.log(response === 3);
  // your app.use statement which needs the response goes here.
  // In fact all your express (im guessing you are using express) stuff goes here
  // Example
  // app.use('/', FalcorServer.dataSourceRoute(function(req, res) {
  //    return response
  // }
});

【讨论】:

  • 谢谢,这有帮助,我知道我会对此表示反对,但我不得不问...
猜你喜欢
  • 2016-12-13
  • 2019-02-12
  • 2018-09-01
  • 2016-08-08
  • 1970-01-01
  • 2021-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多