我很难理解诺言如何运作。我看过一些例子,其中一些是有道理的。但是,当我尝试实际使用它时,我会卡住。我有以下示例:
(我正在使用q和nodejs。getItem()返回一个promise,但是我的函数没有等待它。)
function calculate(id, item) {
var calcId = id ? id : getItem(item);
if (!id && calcId) { calcId = calcId.Id; }
if (calcId) {
update(calcId);
} else {
insert(item);
}
}
根据示例,我看不到没有代码重复该怎么做。
最佳答案
承诺是异步解决的,因此您不能像示例中那样将它们视为同步。您想要做的是,如果需要的话,将值强制为Q承诺,然后从那里开始,这样您就可以确定性地进行操作并且无需重复代码。
我在这里对update
和insert
返回承诺并在需要时返回它们进行一些假设,以便计算本身返回承诺。
function calculate( id, item ) {
return Q( id || getItem(item) ).then(function( calcId ) {
// Code seems weird to be, but it's based on the original example.
// Might want to review this.
if ( !id && calcId ) {
calcId = calcId.Id;
}
return calcId ?
update( calcId ) :
insert( item );
});
}
关于javascript - Javascript promise 转换,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23792530/