gpt4 book ai didi

javascript - promise 链中的返回值没有被调用

转载 作者:IT老高 更新时间:2023-10-28 23:14:34 26 4
gpt4 key购买 nike

我正在使用 Promise 库 Bluebird,我目前遇到的问题是函数内部的所有内容都运行良好,但是当我尝试返回一个值时,该函数反而返回 undefined

这是 promise 链:

function foo() {
createGroupMembers(parsedChat).then(function(val) {
var members = val;

createMessages(parsedChat, maxPages).then(function(val) {
var messages = val;

Promise.all([ createFrontCover(subject, firstdateOfMessages, lastDateOfMessages, isPreview), createStats(parsedChat), createBackCover(parsedChat)])
.then(function (results) {
var front = results[0];
var stats = results[1];
var backcover = results[2];

var book = head + front + stats + members + messages + backcover;

console.log('pages in this book: ', pages);
console.log(book); // logs perfect values.

return book;
});

});

});
}

问题很简单:当调用foo()时,它的值变成undefined而不是book。为什么我会遇到这种行为?

最佳答案

function foo() {
return createGroupMembers(parsedChat).then(function(val) {
var members = val;

return createMessages(parsedChat, maxPages).then(function(val) {
var messages = val;

return Promise.all([createFrontCover(subject, firstdateOfMessages, lastDateOfMessages, isPreview), createStats(parsedChat), createBackCover(parsedChat)])
.then(function(results) {
var front = results[0];
var stats = results[1];
var backcover = results[2];

var book = head + front + stats + members + messages + backcover;

console.log('pages in this book: ', pages);
console.log(book); // logs perfect values.

return book;
});

});

});
}

现在 foo 将返回一个可以解析为 book 值的 promise

foo().then(function(book) {
console.log('huzzah I have book ' + book);
});

老实说,foo 可以重写,但这完全是一个不同的问题

仅供引用:你可以为 foo 做这样的事情

function foo() {
return createGroupMembers(parsedChat)
.then(function(members) { // members
return Promise.all([members, createMessages(parsedChat, maxPages)]);
})
.then(function(members_messages) { // membersMessages
return Promise.all([createFrontCover(subject, firstdateOfMessages, lastDateOfMessages, isPreview), createStats(parsedChat)].concat(members_messages, [createBackCover(parsedChat)]));
})
.then(function(results) { // front, stats, members, messages, back
var book = head + results.join('');

console.log('pages in this book: ', pages);
console.log(book); // logs perfect values.

return book;
});
}

在第二个(是你唯一的)Promise.all 中弄乱了顺序,并在其中添加了以前的 Promise 结果,以使部分的最终连接像 .join 一样简单 - 做这种方式也将正确传播任何错误,因此您对 foo 的使用可以是

foo().then(function(book) {
console.log('huzzah I have book ' + book);
}).catch(function(err) {
// handle any and all errors here
});

关于javascript - promise 链中的返回值没有被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32981798/

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