我不知道这个生成器函数有什么问题:
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/