2015-10-08 6 views
-1

Конечно, есть много асинхронных вопросов и ответов. Но мой вопрос касается асинхронной ситуации, в которой мне нужно что-то вернуть.Как работать с возвратами в async javascript, когда обратные вызовы не являются опцией?

У меня есть это в узле экспресс:

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, как я могу это сделать?

+3

Откиньте голову от стены, потому что без обратных вызовов асинхронный код не будет работать очень хорошо (прочитайте как «вообще»). –

+2

Вы не можете этого сделать. – SLaks

+2

Я предполагаю, что вы видели [этот вопрос] (http://stackoverflow.com/questions/14220321/how-to-return-the-response-from-an-asynchronous-call). Ответ по-прежнему остается таким же - вам все равно придется настроить код для использования обратного вызова. Возможно, ваш конструктор возвращает функцию, которая принимает обратный вызов в качестве аргумента, и именно эта функция вызывает 'setTimeout'. –

ответ

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 
    // } 
}); 
+0

Спасибо, это помогло, я знаю, что я получу некоторые сокращения, но я должен был спросить ... –

 Смежные вопросы

  • Нет связанных вопросов^_^