如果这张图片正确,为什么 <com.twitter.sdk.android.core.identity.TwitterLoginButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
android:id="@+id/bt_conectarTwitter"/>
被叫三遍?
有什么区别?
答案 0 :(得分:0)
每次在给定阶段调用process.nextTick()时,传递给process.nextTick()的所有回调都将在事件循环继续之前得到解决。
事件循环中有短语,
在输入下一个短语之前,事件循环将首先执行所有process.nextTick
回调。
所以这取决于您呼叫process.nextTick
的阶段
这是一个例子
function case1() {
setImmediate(() => {
process.nextTick(() => {
console.log('nextTick')//before going next phase
})
console.log('Immediate')
})
setTimeout(() => {
console.log('timer1') //another phase
})
}
function case2() {
setImmediate(() => {
setImmediate(() => {
console.log('Immediate2') //next event loop
})
console.log('Immediate')
})
setTimeout(() => {
console.log('timer1') //another phase
})
}
然后我在读取文件回调中将它们称为确保它们在同一阶段(轮询阶段)启动。
const fs = require('fs);
case1应该是
fs.readFile('./package.json', ()=>{
case1();
//Immediate
//nextTick
//timer1
})
case2
fs.readFile('./package.json', ()=>{
case2()
//Immediate
//timer1
//Immediate2
})
答案 1 :(得分:0)
process.nextTick()
评估最多process.maxDepth
的回调
这是一个故障保险,可防止process.nextTick()
回调队列完全占用单个可用线程。为了仍然尝试尽快清除队列(例如在下一个滴答声中),在单个事件循环中对回调进行多次评估。
想象process.maxDepth=1
,我们分别叫process.nextTick()
和setImmidiate()
十次。在事件循环的单个滴答声中不会评估所有回调。 process.nextTick()
回调将在事件循环的三个执行中进行评估,而setImmidiate()
回调将需要十个滴答声才能完全执行。