我很难理解诺言如何运作。我看过一些例子,其中一些是有道理的。但是,当我尝试实际使用它时,我会卡住。我有以下示例:
(我正在使用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承诺,然后从那里开始,这样您就可以确定性地进行操作并且无需重复代码。

我在这里对updateinsert返回承诺并在需要时返回它们进行一些假设,以便计算本身返回承诺。

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/

10-10 13:10