从一个承诺的价值传递到下一个

有点新的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); }); }); 

在我创build标题variables的行上,我试图访问该块中创build的帐户对象(var account = data.params)之前,但我得到一个参考错误,说它没有定义。 现在我可以很简单地通过将整个对象发送到accounts.store函数并在完成时parsing对象来绕过这个问题,但对于一个更大的问题,这似乎是一个肮脏的解决方法。 有没有更干净的方法来做到这一点?

您可以在main函数中创buildvariables(并将其设置为promise),或者您可以将其作为第一个promise的结果而不是函数store的结果返回

account是第二次undefined 。然后.then() ,使用data引用Promiseaccounts.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}); }) 

你可以将它传递给一个数组,并在参数中使用解构来解开数组。

 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之后返回account