简化承诺

时间:2017-04-25 07:35:19

标签: javascript typescript promise

如何简化此声明:

.then

我称这些后缀(从public static async Task<XDocument> LoadAsync ( String path , LoadOptions loadOptions = LoadOptions.PreserveWhitespace ) { return Task.Run(()=>{ using (var stream = File.OpenText(path)) { return XDocument.Load(stream, loadOptions); } }); } 开始)很多,我不在乎它是否成功,但我关心它何时失败,是否有更简单的方法做到了吗?

2 个答案:

答案 0 :(得分:3)

使用catch函数只是怎么样?

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/catch

  

catch()方法返回Promise并仅处理被拒绝的案例。它的行为与调用Promise.prototype.then(undefined,onRejected)相同。

答案 1 :(得分:2)

Promise Object中的then函数有参数,第一个参数是成功处理,第二个是处理错误。但它并不建议在then方法中捕获错误。 这两个是相同的(我使用console.log作为错误处理程序):

// first way:
Promise.reject('error').then(success => {}, err => console.log(err));
// console logs "error"

// second way
Promise.reject('error').catch(err => console.log(err));
// console logs "error"

// your code 
Promise.reject('error').then(success => {}, err => console.log(err))
  .catch(err => console.log(err))
// it will prints only a "error" in the console, so there are the same 

所以,如果你不关心什么时候成功,你可以像这样简化你的代码: Foo.execSomething(k,v).catch(err => console.log)