2017-11-12 5 views
0

次のコードでは、2つ目のPromise、すなわち、return asyncAdd(res, 32);が指定されたエラーをスローする間に、2つのJavaScriptプロミスをチェーン化しています。しかし、resolve()のテンプレートリテラルを使用しないことを選択した場合、つまりresolve(`Result for ${a} + ${b}\t= ${a + b}`);の代わりにresolve(a + b);を使用すると、テンプレートが実行されます。JavaScriptプロミスチェーン - テンプレートリテラルの問題

テンプレートのリテラルにステートメントを保持しても、コードが正常に実行されていますか?

ご迷惑をおかけして申し訳ございません。質問を投稿するのは初めてです。おかげ

let asyncAdd = (a, b) => { 
    return new Promise((resolve, reject) => { 
     setTimeout(() => { 
      if (typeof a === 'number' && typeof b === 'number') { 
       resolve(`Result for ${a} + ${b}\t= ${a + b}`); 
      } else { 
       reject(Error('Parameters must be numbers')); 
      } 
     }, 1500); 
    }); 
}; 

asyncAdd(58, 12) 
    .then(res => { 
     console.log(res); 
     return asyncAdd(res, 32); 
    }) 
    .then(res => { 
     console.log(`The result should be `, res); 
    }) 
    .catch(err => { 
     console.error(err); 
    }); 

答えて

1

私は望ましい結果を達成するためのオブジェクトラッパーを使用します。

それはオブジェクトを返しても、それは実際には、働いていた@dhiltかなりクールだ
let asyncAdd = (a, b) => { 
    return new Promise((resolve, reject) => { 
     setTimeout(() => { 
      if (typeof a === 'number' && typeof b === 'number') { 
       resolve({ 
        value: a + b, 
        text: `Result for ${a} + ${b}\t= ${a + b}` 
       }); 
      } else { 
       reject(Error('Parameters must be numbers')); 
      } 
     }, 1500); 
    }); 
}; 

asyncAdd(58, 12) 
    .then(res => { 
     console.log(res.text); 
     return asyncAdd(res.value, 32); 
    }) 
    .then(res => console.log('The result should be', res.value)) 
    .catch(err => console.error(err)); 
+0

。 – Eazy