javascript有点新鲜。 处理承诺,然而遇到了一个我不知道如何接近的问题。
如何将值传递给下一个承诺解析?
这是我的代码
bot.on('ask.add_account_password', (msg) => {
let username = users[msg.from.id].username;
let password = msg.text;
var accounts = require('./inc/account.js');
accounts.login_account(username,password).then(function(data){
var account = data.params;
console.log(account);
return accounts.store(msg.from.id,username,password,account.followerCount);
}).then(function(data){
let caption = "Your account "+account.username+"("+account.fullName+")has been added\n";
return bot.sendPhoto(msg.from.id, account.picture, {caption:caption});
})
.catch(function(error){
console.log(error);
add_account(msg,error.name);
});
});
在我创建标题变量的行上,我正在尝试访问在它之前的块中创建的帐户对象(var account = data.params)但是我得到一个引用错误,说明它未定义。现在我可以通过将整个对象发送到accounts.store函数并让它在完成后解析对象来轻松绕过这一点,但这似乎是一个更大问题的肮脏的解决方法。有更清洁的方法吗?
答案 0 :(得分:1)
account
在undefined
秒.then()
,使用data
引用之前Promise
返回的accounts.store
值.then()
.then(function(data) {
// `data` : `accounts.store` returned from previous `.then()`
let caption = "Your account " + data.username
+ "(" + data.fullName + ")has been added\n";
return bot.sendPhoto(msg.from.id, data.picture, {caption:caption});
})
答案 1 :(得分:1)
您可以在main函数中创建变量(并在promise中设置),或者您可以将此作为第一个promise的结果而不是函数store
答案 2 :(得分:0)
您可以在数组中传递它,并在参数中使用destructuring来解压缩数组。
accounts.login_account(username,password).then(function(data){
var account = data.params;
console.log(account);
return [account, accounts.store(msg.from.id,username,password,account.followerCount)];
}).then(function([account, data]){
let caption = "Your account "+account.username+"("+account.fullName+")has been added\n";
return bot.sendPhoto(msg.from.id, account.picture, {caption:caption});
})
您实际上似乎没有使用data
,因此您可以在致电store
后退回帐户