Как сделать выборку внутри Обещания? - PullRequest
0 голосов
/ 10 ноября 2018

Я пытаюсь вставить выборку в обещание, чтобы я мог использовать ее в Promise.all

let dbconnect = new Promise((rs, rj)=> {
  console.log('dbconnect');
  require('mongodb').MongoClient.connect("mongodb://localhost:27017/mydb", { useNewUrlParser: true } )
}),

call =  new Promise((rs, rj) =>{ 
  console.log('fetch');
  fetch(link)})
});



Promise.all( [dbconnect, call] ).then...

На оба звонка приходят ответы, но он не вызывает Promise.all().then, что я делаю не так?

1 Ответ

0 голосов
/ 10 ноября 2018

Вам нужно вернуть какой-то результат в свои обещания, иначе они не будут переданы в цепочку .then(). В вашем случае, если вы хотите использовать Promise конструкторы, вам следует явно вызвать resolve() с любыми результатами, которые вы хотите передать дальше, например:

let dbconnect = new Promise((rs, rj)=> {
  console.log('dbconnect');
  require('mongodb').MongoClient.connect("mongodb://localhost:27017/mydb", { useNewUrlParser: true }, () => {
    resolve()
  })
}),

call =  new Promise((rs, rj) =>{ 
  console.log('fetch');
  fetch(link).then(resolve)})
});

Но, как уже упоминали другие пользователи, вам, вероятно, не нужно заключать fetch() и MongoClient.connect() (начиная с версии 2.0) в Promise s, поскольку они уже возвращают обещания. Так что вы можете упростить это до:

let dbconnect = require('mongodb').MongoClient.connect("mongodb://localhost:27017/mydb", {useNewUrlParser: true}),
call = fetch(link)

Promise.all( [dbconnect, call] ).then...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...