我正在链接一些返回承诺的请求。第一个是在某个站点上进行登录检查,返回一些凭据。然后我做了一个admin.auth()。createUser()调用。在我知道这个createUser调用成功并且我知道登录检查成功之后,我想使用这两个promises返回的这两个对象来发出第三个请求来在firebase实时数据库中存储信息。我只是不知道如何将这些结果传递给最终的承诺。这是一些代码。
((TextView)findViewById(R.id.company_day1)).setText("Sunday");
((TextView)findViewById(R.id.company_day2)).setText("Monday");
我需要在createUser()解析后将第一个promise的结果传递给writeUserData。
答案 0 :(得分:2)
这在功能上与您的代码相同,只是它将credentials
传递到writeUserData
所需的位置。而不是一个完全平坦的承诺链,你添加一个.then到createUser
响应返回credentials
而不是未使用(在你的代码中)来自createUser
的回复
login(siteUser, sitePass)
.then(credentials =>
admin.auth().createUser({
email,
emailVerified:false,
password,
displayName: username
})
.then(userData => credentials)
)
.then(credentials => writeUserData(userRecord, credentials))
.then(() => res.status(200).send('success'))
.catch(err => res.status(500).send(err));
但是,如果您在代码中犯了错误
.then(userData => {
return writeUserData(userRecord, credentials); // I need to pass credentials here but I don't know how.
})
应该是
.then(userData => {
return writeUserData(userData, credentials); // I need to pass credentials here but I don't know how.
})
(即userRecord应该是userData) - 然后你不会忽略来自createUser
的响应 - 这并不会使代码变得更加复杂
login(siteUser, sitePass)
.then(credentials =>
admin.auth().createUser({
email,
emailVerified:false,
password,
displayName: username
})
.then(userData => ({userData, credentials}))
)
.then(({userData, credentials}) => writeUserData(userData, credentials))
.then(() => res.status(200).send('success'))
.catch(err => res.status(500).send(err));
答案 1 :(得分:1)
Maaz 的Promise.all解决方案也可以使用,除非您需要从登录请求到createUser请求的内容。如果是这样,那么您可以使用下面的解决方案。
login(siteUser, sitePass)
.then(credentials => {
return admin.auth().createUser({
'email': email,
'emailVerified': false,
'password': password,
'displayName': username
})
.then(createUserRes => ({createUserRes, credentials})
})
.then(userData => {
// You can now access both the createUserRes & credentials as
// userData.credentials or userData.createUserRes
return writeUserData(userRecord, credentials); // I need to pass credentials here but I don't know how.
})
.then(() => res.status(200).send('success'))
.catch(err => res.status(500).send(err));
答案 2 :(得分:0)
你可以试试这个。您需要使用Promise.all
const loginPromise = login(siteUser, sitePass);
const createUserPromise = admin.auth().createUser({
'email': email,
'emailVerified': false,
'password': password,
'displayName': username
})
Promise.all([loginPromise, createUserPromise]).then(result => {
// Then use result array
return writeUserData(result[1], result[0]);
}).then(() => res.status(200).send('success'))
.catch(err => res.status(500).send(err));