我有一个异步函数,它可以调用多个其他异步函数中的一个;我可以将它拆分成多个.then.catch链,但我想知道是否可以将它们合并在一起。我所拥有的是:
return new Promise((resolve, reject) => {
if (payload.method === 'a')
doFunctionA(arg)
.then((x) => resolve())
.catch((error) => reject())
else if (payload.method === 'b')
doFunctionB()
.then((x) => resolve())
.catch((error) => reject())
});这很简单,但是有没有另一种方法来编写这个代码,以便then和catch只写一次?像这样:
return new Promise((resolve, reject) => {
var f = (payload.method === 'a' ? doFunctionA(arg) : doFunctionB());
f()
.then((x) => resolve())
.catch((error) => reject())
});发布于 2017-08-17 15:44:02
因为doFunctionA和doFunctionB已经返回Promises,所以您不必将它们包装在另一个Promise中
(payload.method === 'a' ? doFunctionA : doFunctionB)(arg)
.then((x) => resolve())
.catch((error) => reject())发布于 2017-08-17 15:44:23
是。除了两次调用f之外,您已经非常接近正确的方法了。尝试如下所示:
return new Promise((resolve, reject) => {
(payload.method === 'a' ? doFunctionA : doFunctionB)(arg)
.then((x) => resolve())
.catch((error) => reject())
;
});更好的方法是按照@Patrick的建议返回函数
return (payload.method === 'a' ? doFunctionA : doFunctionB)(arg);https://stackoverflow.com/questions/45729236
复制相似问题