javascript - TypeError : You may only yield a function, promise ,生成器...当产生 app.listen() 时

标签 javascript node.js express generator

我不知道这个生成器函数有什么问题:

var dbUrl = 'mongodb://localhost:27017/voyanta';
var db;
var server;

co(function*() {
    // Use connect method to connect to the Server
    db = yield MongoClient.connect(dbUrl);
    server = yield app.listen(3000);
    console.log('Connected to database. Listening on port 3000.');

}).catch(function(err) {
    console.log(err.stack);
});

它对我来说看起来非常好,但是“server = Yield app.listen(3000);”行创建错误:“类型错误:您只能生成一个函数、promise、生成器、数组或对象,但传递了以下对象:“[object Object]”。

最佳答案

app.listen(3000) 不返回 promise 。

而不是:

server = yield app.listen(3000);

你可以这样做:

server = app.listen(3000);
yield new Promise(res => server.on('listening', res));

或者更好:

server = app.listen(3000);
yield new Promise((res, rej) => {
    server.on('listening', res);
    server.on('error', rej);
});

使用此示例进行测试:

var co = require('co');
var app = require('express')();

co(function*() {
    server = app.listen(3000);
    yield new Promise((res, rej) => {
        server.on('listening', res);
        server.on('error', rej);
    });
    console.log('Listening on port 3000.');
}).catch(function(err) {
    console.log(err.stack);
});

关于javascript - TypeError : You may only yield a function, promise ,生成器...当产生 app.listen() 时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42169802/

相关文章:

javascript - Laravel 使用 javascript 的正确过程。

javascript - 如果我希望在单击扩展时运行 javascript,则绕过 "no popup"

javascript - 消息不显示在新行上

javascript - 如何使用 JSDOM (Node.js) 获取 img src

javascript - 与 npm install 集成

css - 在 express + webpack 服务器中提供 css

javascript - 如何获取通过 sails.js 中的表单发送的数组/对象(使用 enctype multipart/form-data)

javascript - 如何立即取消续订?

javascript - 如何避免隐藏不应该隐藏的部分?

javascript - Nodejs 中间件在两个文件中