gpt4 book ai didi

node.js - promise.then() 在 promise.resolve() 之前执行

转载 作者:可可西里 更新时间:2023-11-01 09:48:54 25 4
gpt4 key购买 nike

我正在使用 bluebird promise 库并尝试从 MongoDb 获取数据,问题是 .then 在我从 db 获取数据之前执行 promise 函数。这是我获取数据的代码。

function getCollection( collectionName ) {

var p = database.listCollections().toArray( function(err, collInfos) {

if ( err ) return null;

for (var i = 0; i <= collInfos.length; i++) {
console.log('getdata');
if ( collInfos[i].name === collectionName ) {
return collInfos[i];
}

if ( i === collInfos.length - 1 ) {
return null;
}
}

});

p = Promise.resolve( p ).bind( p ).then( function collection( res ) {
console.log(res,'res');
return res;
});

return p; }

当执行此代码时,我会使用“res”取消定义,然后打印“getdata”。

最佳答案

只要您不传递回调,MongoDB 方法就会返回 promise 。因为你确实通过了一个,p 变成了 undefined 并且 Promise.resolve 不知道要等待什么。相反,使用

function getCollection( collectionName ) {
return Promise.resolve(database.listCollections().toArray())
.then(function(collInfos) {
for (var i = 0; i <= collInfos.length; i++) {
console.log('getdata');
if ( collInfos[i].name === collectionName ) {
return collInfos[i];
}
}
return null;
}, function(err) {
return null;
})
.then( function collection( res ) {
console.log(res,'res');
return res;
});
}

关于node.js - promise.then() 在 promise.resolve() 之前执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39959208/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com