簡體   English   中英

TypeError:您只能產生一個函數,promise,generator…,而產生一個app.listen()

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

我無法確定此生成器函數出了什么問題:

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)不返回承諾。

代替:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM