我正在编写一个JavaScript函数,该函数发出HTTP请求并返回对结果的承诺(但该问题同样适用于基于回调的实现)。
如果我立即知道为该函数提供的参数无效,该函数应该throw
同步还是应该返回被拒绝的Promise(或者,如果您愿意,请使用Error
实例调用回调)?
异步功能应 始终 以异步方式运行(特别是对于错误情况)有多重要?是否确定throw
,如果你知道程序是不是一个合适的状态的异步操作继续进行?
例如:
function getUserById(userId, cb) {
if (userId !== parseInt(userId)) {
throw new Error('userId is not valid')
}
// make async call
}
// OR...
function getUserById(userId, cb) {
if (userId !== parseInt(userId)) {
return cb(new Error('userId is not valid'))
}
// make async call
}
最终,决定是否同步投掷取决于您,您可能会发现有人在两边争辩。重要的是记录行为并保持行为的一致性。
我对此的 看法 是,您的第二个选项-将错误传递给回调-看起来更优雅。否则,您将得到如下代码:
try {
getUserById(7, function (response) {
if (response.isSuccess) {
//Success case
} else {
//Failure case
}
});
} catch (error) {
//Other failure case
}
这里的控制流程有些混乱。
似乎if / else if / else
在回调中具有单个结构并放弃周围环境会更好try / catch
。
问题内容: 我下面发布的示例代码显示了两个类。一个实现KeyListener,另一个实现Runnable,并在每20 ms休眠的无限循环中运行。当按下键时,采用int形式的keyChar用作索引,设置布尔数组的索引true或false,表示是否按下了该键。同时,过程循环正在键数组中搜索其true或false值,并将true设置为false,然后打印出char。我的问题是我是否需要使用带锁的同步来访
问题内容: 我正在编写一个将异步检索数据的服务($ http或$ resource)。我可以通过返回一个最初为空但最终将填充的数组来隐藏它是异步的事实: 或者我可以通过返回一个承诺来暴露异步性: (Plunker-如果有人想尝试上述两种实现。) 暴露异步性的一个潜在优势是,我可以通过向方法中添加错误处理程序来处理控制器中的错误。但是,我很可能会在应用程序范围的拦截器中捕获并处理$ http错误。
我目前正在阅读Trevor Burnham的Async Javascript。到目前为止这是一本很棒的书。 他谈到这个片段和console.log在Safari和Chrome控制台中是“异步”的。不幸的是我无法复制这个。代码如下: 如果这是异步的,我会预期结果是books的结果。将console.log()放在事件队列中,直到所有代码执行完毕,然后运行它,它将具有bar属性。 虽然它是同步运行的,
我有多个线程使用ElasticSearchClient,如下所述 据我所知,Singleton类是线程安全的,但我不确定如果多个线程开始执行Singleton类的同一方法会发生什么。这有副作用吗? 注意:我知道上面的singleton类不是反射和序列化安全的。
问题内容: 我该如何做这项工作 我试图从异步之一获取同步功能,我需要它来使用FreeTds异步查询作为同步之一 问题答案: 使用deasync-用C ++编写的模块,它将Node.js事件循环暴露给JavaScript。该模块还公开了一个函数,该函数阻止后续代码,但不阻止整个线程,也不引起繁忙的等待。您可以将函数放入循环中:
projectReactor文档说明是异步的,如下所示。 所以,我可以这样写我的所有方法来返回Mono发布者。 并与一起使用,如下所示: 公共最终单声道平面映射(函数<?super T,?extends Mono<?extends r>>transformer) 异步转换此单声道发出的项,返回另一个单声道发出的值(可能更改值类型)。