【发布时间】:2017-08-31 17:00:22
【问题描述】:
当我开始这样的代码
import Promise from 'bluebird';
const mongodb = Promise.promisifyAll(require('mongodb'));
const MongoClient = mongodb.MongoClient;
MongoClient.connect(url).then((db) => {
return Promise.all([new WorkerService(db)]);
}).spread((workerService) => (
Promise.all([new WorkerRouter(workerService)])
)).spread((workerRouter) => {
app.use('/worker', workerRouter);
}).then(() => {
httpServer.start(config.get('server.port'));
}).catch((err) => {
console.log(err);
httpServer.finish();
});
我看错了
}).spread(function (workerService) {
^
TypeError: MongoClient.connect(...).then(...).spread is not a function
请帮助我。我究竟做错了什么?
【问题讨论】:
-
显然 `MongoClient.connect(...).then(...)` 不是 Bluebird 的承诺。为什么你仍然使用
.spread()作为单个参数?而且,你为什么要使用Promise.all()并传递一个长度为 1 的数组?这两个都很奇怪。 -
new WorkerRouter(workerService)是否返回承诺?似乎不会,所以我不知道你为什么要把它传递给Promise.all()。Promise.all()需要一系列承诺。 -
我怀疑“new AnythingOtherThanPromise”会返回一个 Promise
-
既然你是新来的,让我解释一下堆栈溢出。我们正在努力帮助您,但您似乎已发布然后消失了。这并不是堆栈溢出的工作原理。这个地方比典型的互联网论坛更具互动性,您可能会在其中发布然后第二天回来查看您收到的回复。如果您在这里这样做并且未能与向您提问的人互动,那么您的问题可能会因为没有回应或不清楚而被否决。
标签: javascript ecmascript-6 promise