gpt4 book ai didi

javascript - Node 返回 BluebirdJS Promise

转载 作者:行者123 更新时间:2023-12-03 07:15:45 24 4
gpt4 key购买 nike

我有一个小问题,这个脚本工作得很好,有一个问题,“runTenant”方法没有返回一个 promise (需要从“all()”解决。

这段代码:

Promise.resolve(runTenant(latest)).then(function() {
end();
});

调用此代码:

function runTenant(cb) {
return new Promise(function() {
//global var
if (!Tenant) {
loadCoreModels();
Tenant = bookshelf.core.bs.model('Tenant');
}

new Tenant().fetchAll()
.then(function(tenants) {

if (tenants.models.length == 0) {
return;
} else {
async.eachSeries(tenants.models, function(tenant, next) {

var account = tenant.attributes;
Promise.resolve(db_tenant.config(account)).then(function(knex_tenant_config) {
if (knex_tenant_config) {
db_tenant.invalidateRequireCacheForFile('knex');
var knex_tenant = require('knex')(knex_tenant_config);
var knex_pending = cb(knex_tenant);
Promise.resolve(knex_pending).then(function() {
next(null, null);
});
} else {
next(null, null);
}
});

});
};
});
});
}

来自 runTenant 的代码工作正常,但它停止运行并且不会继续到“end()”,因为来自“runTenant(latest)”的 promise 尚未得到解决。

好像这并不明显,我很讨厌 promise 。仍在努力了解它们。

非常感谢您的帮助/指导!

最佳答案

你不应该在这里使用 Promise 构造函数(基本上,也不应该在其他任何地方使用),即使你让它工作,它也会是 antipattern 。你从未兑现过这个 promise - 请注意 resolve argument Promise 构造函数回调是一个与 Promise.resolve 非常不同的函数.

如果您手头有像 Bluebird 这样强大的 Promise 库,则不应使用 async 库。

As if it weren't apparent, I am horrible at promises.

也许你想看看我的rules of thumb用于编写 Promise 函数。

您的函数应如下所示:

function runTenant(cb) {
//global var
if (!Tenant) {
loadCoreModels();
Tenant = bookshelf.core.bs.model('Tenant');
}
return new Tenant().fetchAll().then(function(tenants) {
// if (tenants.models.length == 0) {
// return;
// } else
// In case there are no models, the loop iterates zero times, which makes no difference
return Promise.each(tenants.models, function(tenant) {
var account = tenant.attributes;
return db_tenant.config(account).then(function(knex_tenant_config) {
if (knex_tenant_config) {
db_tenant.invalidateRequireCacheForFile('knex');
var knex_tenant = require('knex')(knex_tenant_config);
return cb(knex_tenant); // can return a promise
}
});
});
});
}

关于javascript - Node 返回 BluebirdJS Promise,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36435954/

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