Я хочу запустить операцию async (например, дождаться завершения вызова URL), прежде чем запускать приложение. Я не знаю, как это сделать (поскольку это приложение верхнего уровня - нет async/await здесь).Запуск функции async перед началом express.js
www.js:
var app = require('./app');
var http = require('http');
const port = '3000';
app.set('port', port);
var server = http.createServer(app);
server.listen(port);
app.js:
var express = require('express');
var app = express();
var Promise = require('bluebird');
# HERE IS WHERE I WANT TO "AWAIT" AN ASYNCHRONOUS CALL.
# I KNOW I CAN'T USE AWAIT BECAUSE I'M NOT WITHIN
# AN "ASYNC" ANNOTATED FUNCTION. EXAMPLE:
const data = await Promise.promisify(fs.readFile('DATA'));
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
app.use(express.static(path.join(__dirname, 'public')));
app.use('/', routes);
module.exports = app;
Я думал о оборачивать все app.js
с Promise.promisify(), так что я могу использовать асинхронной Await жгутов его. Но я не уверен, как это будет обработано в www.js
, так как он не вызывается, как в app()
, но перешел к http.createServer
Вы искали учебники по обещаниям? Вот хороший старт: https://github.com/kriskowal/q –
* Что * асинхронный вызов? Кроме того, 'app.js' не показывает экспорта, и все же вы используете его, как если бы он был. –
@ T.J.Crowder вы правы. Виноват. Отредактировано, чтобы добавить экспорт и проиллюстрировать чтение файла (я знаю, что есть версия синхронизации. Предположим, что нет или я использую какой-либо другой вызов Promised) – eran