Javascript 承诺链内的返回值为';我没接到电话
我使用的是promise库Bluebird,目前我遇到了一个问题,即函数中的所有内容都运行良好,但当我尝试返回值时,函数反而返回Javascript 承诺链内的返回值为';我没接到电话,javascript,node.js,promise,bluebird,Javascript,Node.js,Promise,Bluebird,我使用的是promise库Bluebird,目前我遇到了一个问题,即函数中的所有内容都运行良好,但当我尝试返回值时,函数反而返回未定义的 这就是承诺链: function foo() { createGroupMembers(parsedChat).then(function(val) { var members = val; createMessages(parsedChat, maxPages).then(function(val) {
未定义的
这就是承诺链:
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将返回一个承诺,该承诺可以解决账面价值问题
foo().then(function(book) {
console.log('huzzah I have book ' + book);
});
老实说,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;
});
}
第二个(是你唯一的)承诺中的顺序混乱了。所有,并添加了前一个承诺结果,使零件的最终关联像一样简单。join
-这样做也会正确传播任何错误,因此你对foo的使用可以
foo().then(function(book) {
console.log('huzzah I have book ' + book);
}).catch(function(err) {
// handle any and all errors here
});
foo在allI没有返回任何东西我不熟悉Bluebird,但我使用了本地JS承诺。话虽如此。。。匿名函数
函数(结果)
返回book。上面的两个匿名函数function(val)
不返回任何内容<代码>foo最终不会返回任何内容。您需要返回所有嵌套函数。createGroupMembers、createMessages等@JaromandaX如何使其返回任何内容,为什么不返回?