【发布时间】:2014-08-27 00:54:34
【问题描述】:
我有这个功能:
var send = function send (report) {
someAsnycFn().then(
function () {
synchronousSend(report);
return true;
}, function () {
throw new Error("The user is not authenticated! Not sending report");
});
};
我的目标是让 send 函数阻止代码执行,直到 promise 得到解决,然后执行相应的代码块并继续执行代码。
我猜例如在 C# 中你会为此使用 await...
我如何在 JS 中做到这一点?
谢谢大家。
【问题讨论】:
-
你的
send函数应该return一个承诺! -
为什么?我不想更改我的代码以满足我的测试框架。
-
这不是为了满足一个测试框架,而是为了你的应用程序的功能。如果您拒绝未返回的承诺,则没有人能够处理拒绝 - 无法捕获
throw(无论是在您的测试中,还是在您的实际代码中)。 -
你必须返回promise,除非你想阻塞整个进程>一切都用回调处理,只有一个线程运行JavaScript本身,这就是本质语言。如果你想在
send完成时执行代码,让它返回promise,然后使用send的人就可以使用promise。 -
@Sentenza: "现在我想要同步发送" - 那是不可能的。你真的不想让代码阻塞。 Promise 不是在同步和异步之间切换的工具,它们是使异步回调更加可组合和可维护的工具。