我已經使用$ q(Angular.js)並且通常會在.then
調用中返回承諾。結果是,下一個.then
調用將等待先前的承諾完成。混合使用J6承諾的ES6承諾
我現在使用原生es6承諾試圖'promisify'基於回調的庫,我無法這樣做。
問題是,.then
鏈中的下一個值是承諾對象,而不是該承諾的已解決值。它在promise解決之前調用下一個.then
值,僅返回最後的返回值。
無論如何要等待以前的承諾來解決?
例子:
$.ajax({
url: "//localhost:3000/api/tokens",
type: "POST",
data: JSON.stringify({
user: {
email: '[email protected]',
password: 'password123'
}
}),
contentType: "application/json"
})
.then(data => data.token.encoded) // OK
.then(token => Farmbot({ token: token })) // OK
.then(function(bot){ // OK
return new Promise(function(resolve, reject) {
bot.connect(function(){ resolve(bot); });
});
}, errorr)
.then(function(bot){ // NOT OK!
// passes in an unresolved promise object, which is useless.
//
bot; // => {[[PromiseStatus]]: "pending", [[PromiseValue]]: undefined}
});
我的問題是:
待辦事項ES6承諾等前.then
的承諾來解決?
角和jQuery不作特別好同牀異夢:
轉換jQuery的「thenable」對象到ES6信任他們可以解決這個問題之前的承諾。在一個角度的應用程序中,你真的應該使用'$ http()',而不是'jQuery.ajax()' –