Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/419.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript TypeError:您只能生成函数、承诺、生成器。。。生成app.listen()时_Javascript_Node.js_Express_Generator - Fatal编程技术网

Javascript TypeError:您只能生成函数、承诺、生成器。。。生成app.listen()时

Javascript TypeError:您只能生成函数、承诺、生成器。。。生成app.listen()时,javascript,node.js,express,generator,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

我无法判断此发电机功能有何问题:

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);”这行创建了错误:“Type error:您可能只生成函数、承诺、生成器、数组或对象,但传递了以下对象:“[object object]”。

app.listen(3000)
不返回承诺

而不是:

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);
});
app.listen(3000)
不会回复承诺

而不是:

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