简体   繁体   English

TypeError:您只能产生一个函数,promise,generator…,而产生一个app.listen()

[英]TypeError: You may only yield a function, promise, generator… when yielding app.listen()

I cannot tell what is wrong with this generator function: 我无法确定此生成器函数出了什么问题:

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);
});

It looks perfectly fine to me, but the line "server = yield app.listen(3000);" 在我看来,这很好,但是“ server = yield app.listen(3000);”行 creates the error: "Type Error: You may only yield a function, promise, generator, array, or object, but the following object was passed: "[object Object]". 创建错误:“类型错误:您只能产生函数,promise,生成器,数组或对象,但是传递了以下对象:“ [object Object]”。

app.listen(3000) doesn't return a promise. app.listen(3000)不返回承诺。

Instead of: 代替:

server = yield app.listen(3000);

you can do something like: 您可以执行以下操作:

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

or better yet: 或更好:

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

Tested with this example: 用这个例子测试:

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);
});

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM