【发布时间】:2017-09-13 19:02:38
【问题描述】:
我有两个承诺。一个没有解决,我不知道为什么。
processTradeOffer:尝试处理名为'offer'的对象的承诺链。 identifyOffer 返回一个可能是 "valida" 的变量 | “可接受” | “可否认”。如果是“有效”,我们需要从报价中识别项目。所以我们需要另一个异步函数 identifyItems(offer) 将返回 var 'offerState' "denegable" | “可接受”,然后我们可以拒绝或接受报价。
我知道声明中没有问题(offerState == 'valida')。 代码:
const processTradeOffer = function(offer) {
return new Promise(function(resolve, reject) {
identyOffer(offer)
.then(function(offerState) {
return finishTradeOffer(offer, offerState);
}).then(function() {
console.log('aqui');
return resolve();
})
})
}
const finishTradeOffer = function(offer, offerState) {
return new Promise(function(resolve, reject) {
if (offerState == 'aceptable') {
acceptTradeOffer(offer).then(function() {
return resolve();
})
} else if (offerState == 'denegable') {
declineTradeOffer(offer).then(function() {
console.log('here');
return resolve();
})
} else if (offerState == 'valida') {
identifyItems(offer).then(function(offerState) {
finishTradeOffer(offer, offerState);
})
}
})
}
Console.log('here') 成功触发,Console.log('aqui') 不成功。
【问题讨论】:
-
你根本不应该使用
new Promise()。 -
如果
offerstate == 'valida'会发生什么?顺便说一句,.then(function() { return resolve(); })与then(resolve)相同,但无论如何你都不应该这样做。 -
看起来
identyOffer、acceptTradeOffer等已经返回承诺,因为您正在调用then()。对吗? -
请添加
identyOffer和finishTradeOffer的定义。 -
我有相同的程序运行良好的回调。我只想迁移到提高我的知识的承诺。我应该返回使用回调吗?
标签: javascript node.js promise resolve