NodeJS 0.11以及io.js和Node 0.12分支都带有本机Promise。
本机承诺具有.then
始终在未来事件循环周期中执行的方法。
setImmediate
从我从nextTick切换到现在,到目前为止,我一直在将事情排队到事件循环的下一个迭代:
setImmediate(deferThisToNextTick); // My NodeJS 0.10 code
process.nextTick(deferThisToNextTick); // My NodeJS 0.8 code
由于我们现在有了一种新的方法来执行此操作:
Promise.resolve().then(deferThisToNextTick);
我应该使用哪个?也-
并Promise.resolve.then
像setImmediate
或类似nextTick
至于事件循环之前或之后运行的代码?
使用Promise.resolve().then
没有优势nextTick
。它在相同的队列上运行,但是具有更高的优先级,也就是说,promise处理程序可以阻止下一个滴答回调的运行,相反则不可能。此行为是实现细节,不应依赖。
Promise.resolve().then
显然要慢一些(我认为很多),因为它创建了两个被抛弃的承诺。
您可以在此处找到广泛的实施信息:https :
//github.com/joyent/node/pull/8325
最重要的部分:Promise.resolve().then
喜欢nextTick
和不喜欢setImmediate
。使用n代替setImmediate
可以大大改变您的代码行为。
以下两者之间的区别是什么: 这是: 我问,因为我得到不同的行为使用Angular和$超文本传输协议服务与链接。代码有点太多,因此首先是上面的例子。
我很难得到一个Jest Mock实现来返回promise数据。在特定上下文中解析()。 在我的节点中。js代码,我有一个结构,将所有API调用代码放在一个类(API)中,将所有业务逻辑放在另一个类(Repo)中。当您实例化Repo时,它会为自己创建一个Api类的实例: 我正在尝试在Repo级别测试一个函数,并模拟Api调用,以便在测试期间不进行任何查询。 当我执行函数,返回true,但它返回的值是