我的代码类似于:
int length=1;
void arrayinc(int** array, int x0, int x1)
{
if (array == NULL)
malloc(array, sizeof(int[2]));
else
realloc(array, (++length)*sizeof(int[2]));
array[length-1][0]=x0;
array[length-1][1]=x1;
free(array);
}
int main()
{
int** array=NULL;
arrayinc(&array, 1, 2);
// I will do some stuff after the increase
}
})
我只想在第一个承诺被拒绝且.catch函数触发后才运行bar()函数和.then .catch函数。
我试过这个:
router.post("/", (req, res, next) => {
foo()
.then((result) => {
res.send(result)
})
.catch((error) => {
cosnole.log(error)
})
//I only want the bar() function and everything below it to run if the first promise is rejected and the first .catch function ran
bar()
.then((data) => {
res.send(data)
})
.catch((error) => {
console.log(error)
})
})
但是当第一个foo()函数的错误被捕获并且拒绝承诺时,bar()函数永远不会被执行。
答案 0 :(得分:4)
将调用移至 in catch。
router.post("/", (req, res, next) => {
foo()
.then((result) => {
res.send(result)
})
.catch((error) => {
cosnole.log(error);
return bar()
.then((data) => {
res.send(data)
})
.catch((error) => {
console.log(error)
});
});
});
答案 1 :(得分:3)
正如其他人提到的,你只需要在catch
处理程序中移动代码。
但是,您可能希望简化并更正代码
router.post("/", (req, res, next) => {
foo().catch(bar).then(result => {
res.send(result);
, error => {
console.error(error);
res.sendStatus(500); // or next(error) or whatever
});
})
如果您想要记录foo
中的错误,即使bar
处理了错误,您也可能需要
foo().catch(error => {
console.log(error, "(handled by bar)");
return bar();
}).…
答案 2 :(得分:0)
鉴于代码的异步性,Drawable imageDrawable = Drawable.createFromStream("my_logo.png", null);
imageView.setBackground(imageDrawable);
始终为if (rejected==true)
,因为该代码在第一个false
或{{1}之前执行 }。
你可以:
then
catch
答案 3 :(得分:0)
I / O调用是异步发生的,所以在res.send()返回任何响应之前,您的if
代码会运行。有几种方法可以处理这种情况,这是使用asyn/await
编写看似同步的代码的另一种方法:
router.post("/", async (req, res, next) => {
rejected = false
try {
await foo()
.then((result) => {
res.send(result)
})
} catch {
rejected = true
console.log(error)
}
if(rejected == true)
bar()
.then((data) => {
res.send(data)
})
.catch((error) => {
console.log(error)
})
})
答案 4 :(得分:-1)
尝试返回栏以实现承诺。
<div id="mainPage">
<div class="bicycle" id="bicycleOriginal"></div>
<p class="txt" id="mainTxt">DRAHTESEL</p>
<div class="bicycle" id="bicycleFlipped"></div>
</div>
-----------------编辑-----------------
这是一个完全可测试的ExpressJS示例副本,包含您的问题:
router.post("/", (req, res, next) => {
foo()
.then((result) => {
res.send(result)
})
.catch((error) => {
console.log(error);
return bar;
})
.then((data) => {
res.send(data);
})
.catch((error) => {
console.log(error)
});
});