User.save()是一个带有承诺的函数
这将返回一个对象:
user = user.save();
return sequelize.Promise.all([user, ...])
.then((results) => {
console.log(results[0])
})
但这会返回一个承诺:
return sequelize.Promise.all([user, name, fbprofile, phone])
.then(()=> {
console.log(user)
})
我想使用第一个,因为我想在一个单一的承诺链中使用它:
return sequelize.Promise.all([user, name, fbprofile, phone])
.then(user.addUserAttributes([name, fbprofile, phone]))
.then...
答案 0 :(得分:1)
您的代码
return sequelize.Promise.all([user, name, fbprofile, phone])
.then(user.addUserAttributes([name, fbprofile, phone]))
.then...
将在评估语句时调用user.addUserAttributes
,这不是您想要的,并且无论如何都不会起作用,因为name
等将不会被定义。您想将函数处理程序传递给then
。该函数将一个参数数组作为参数,解析传递给Promise.all
的每个承诺的结果,您可以在其中解构,如下面的代码所示。然后在函数体中调用addUserAttributes
方法。
return sequelize.Promise.all([user, name, fbprofile, phone]) .
then([user, name, fbprofile, phone]) =>
user.addUserAttributes(name, fbprofile, phone)
);
以上假设不仅user
,而且name
,fbprofile
和phone
都是承诺。如果不是这种情况,并且只有user
是承诺,那么就没有理由使用Promise.all
。你可以写:
return user .
then(user => user.addUserAttributes(name, fbprofile, phone));
你已经完成了。
我还假设user#addUserAttributes
获取参数列表,而不是单个数组参数;如果不是这种情况,请根据需要进行调整。
顺便说一下,你说:
这将返回一个对象:
user = user.save();
return sequelize.Promise.all([user, ...])
.then((results) => {
console.log(results[0])
})
实际上,假设“返回”是指return
语句返回的值,而不是console.log
打印的值,确实返回一个承诺(解析为未定义,因为then
处理程序不返回任何内容),不一个对象。
最后,你问题的标题
promise.all对变量做了什么?
很奇怪,可能反映出你的困惑。 Promise.all
对任何变量都不做任何事情。它只是评估一个承诺,它将在所有指定的承诺履行时实现,其履行的价值是各个履行值的数组。
答案 1 :(得分:-1)
简单地将promise all等待在执行之前加载的数组中的所有变量。使用它时应小心,因为它相对较新,并且在移动设备上得不到很好的支持。