如何将获取内容放入Promise?

时间:2018-11-10 18:20:59

标签: javascript node.js ecmascript-6

我正在尝试在承诺中放入提取内容,以便可以在Promise中使用它。全部

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 :(得分:2)

您需要在承诺中返回一些结果,否则,它们将不会传递到链接的.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()(自v2.0起)包装到Promise中,因为它们已经返回了promise。因此,您可以将其简化为:

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

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