gpt4 book ai didi

javascript - 警告 : a promise was created in a handler at but was not returned from it [bluebird]

转载 作者:行者123 更新时间:2023-12-01 03:12:03 25 4
gpt4 key购买 nike

所以我从 GitHub 克隆了这个项目并运行了“npm install”,最终出现了一些警告,但没有错误,然后我运行了“npm run dev”,这 4 个命令的执行没有任何问题,但是,我得到了服务器启动后出现此错误。我现在有点陷入困境,非常感谢一些帮助。

这是我收到的错误:

promise.js

function Promise(executor) {
if (executor !== INTERNAL) {
check(this, executor);
}
this._bitField = 0;
this._fulfillmentHandler0 = undefined;
this._rejectionHandler0 = undefined;
this._promise0 = undefined;
this._receiver0 = undefined;
this._resolveFromExecutor(executor);
this._promiseCreated();
this._fireEvent("promiseCreated", this);
}

setup-classeur.js

function refresh (cb) {
Tutorials.list().then(list => {
CACHE.List = JSON.parse(list).map(file =>
Object.assign({
ref: urlify(file.name)
}, file));

Promise.all(CACHE.List
.filter(shouldLoadFile)
.map(file =>
Tutorials.get(file.id).then(content => {
CACHE.Files[file.ref] = JSON.parse(content);
}).catch(console.error))
).then(cb);
}).catch(console.error);
}

最佳答案

您在这里创建了一个 promise :

Promise.all(CACHE.List
.filter(shouldLoadFile)
.map(file =>
Tutorials.get(file.id).then(content => {
CACHE.Files[file.ref] = JSON.parse(content);
}).catch(console.error))
).then(cb);

没有归还。这意味着,例如,如果被拒绝,您的 .catch(console.error) 将不适用。您可以从返回它开始:

function refresh (cb) {
Tutorials.list().then(list => {
CACHE.List = JSON.parse(list).map(file =>
Object.assign({
ref: urlify(file.name)
}, file));

<b>return</b> Promise.all(CACHE.List
.filter(shouldLoadFile)
.map(file =>
Tutorials.get(file.id).then(content => {
CACHE.Files[file.ref] = JSON.parse(content);
}).catch(console.error))
).then(cb);
}).catch(console.error);
}

但这仍然不是最佳选择,因为涉及到回调。理想情况下,您只需从 refresh 返回一个 promise ,并将错误处理留给调用者,它可以做一些比记录错误更有用的事情。这也减少了重复代码。

function refresh () {
<b>return</b> Tutorials.list().then(list => {
CACHE.List = JSON.parse(list).map(file =>
Object.assign({
ref: urlify(file.name)
}, file));

return Promise.all(CACHE.List
.filter(shouldLoadFile)
.map(file =>
Tutorials.get(file.id).then(content => {
CACHE.Files[file.ref] = JSON.parse(content);
}))
);
});
}

然后您可以使用 Bluebird 的实用程序重新排列一下:

function refresh () {
return Tutorials.list()
.then(JSON.parse)
.map(file =>
Object.assign({
ref: urlify(file.name)
}, file))
.tap(list => {
CACHE.List = list;
})
.filter(shouldLoadFile)
.map(file =>
Tutorials.get(file.id).then(content => {
CACHE.Files[file.ref] = JSON.parse(content);
}));
}

并重构,以便 Tutorials.list()Tutorials.get() 解析它们自己的 JSON:

function refresh () {
return Tutorials.list()
.map(file =>
Object.assign({
ref: urlify(file.name)
}, file))
.tap(list => {
CACHE.List = list;
})
.filter(shouldLoadFile)
.map(file =>
Tutorials.get(file.id).then(content => {
CACHE.Files[file.ref] = content;
}));
}

如果您使用 Node 8.3.0 或更高版本:

function refresh () {
return Tutorials.list()
.map(file =>
({ ref: urlify(file.name), ...file }))
.tap(list => {
CACHE.List = list;
})
.filter(shouldLoadFile)
.map(file =>
Tutorials.get(file.id).then(content => {
CACHE.Files[file.ref] = content;
}));
}

关于javascript - 警告 : a promise was created in a handler at but was not returned from it [bluebird],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45766729/

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