我正在尝试在承诺中放入提取内容,以便可以在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
,我在做什么错了?
答案 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...