setInterval node.js中的async和sync func有什么区别
我知道setInterval函数将运行一些定期任务。但是我想知道async和sync func之间的区别。这里有一个例子setInterval node.js中的async和sync func有什么区别,node.js,Node.js,我知道setInterval函数将运行一些定期任务。但是我想知道async和sync func之间的区别。这里有一个例子 const fetchFile = async ()=>{//dosometing} setInterval(async()=>{ fetchFile() }, 1000) setInterval(async()=>{ await fetchFile() }, 1000) setInterval(()=>{ fetchFile() }
const fetchFile = async ()=>{//dosometing}
setInterval(async()=>{
fetchFile()
}, 1000)
setInterval(async()=>{
await fetchFile()
}, 1000)
setInterval(()=>{
fetchFile()
}, 1000)
三种实现之间的间隔本身没有实际的区别。setInterval不注意回调的返回值,因此异步版本返回承诺并不重要 如果要在回调函数中为自己的实现使用wait,可以将其声明为async,但无论使用wait还是.then,这都不会影响事件循环。使用wait,只要您在承诺上点击wait,回调将立即返回,事件循环将能够处理其他事件。如果你这样做的话,情况也是如此。当异步操作正在运行且promise正在等待获得完成通知时,事件循环可以处理其他事件 您可能还想知道这两者之间没有区别:
fn(async()=>{
fetchFile()
}, 1000)
fn(async()=>{
await fetchFile()
}, 1000)
甚至在世界之外。在异步函数的最后一行执行等待不会添加任何内容。这只是多余的。但是,在setInterval的情况下,由于setInterval不关注回调的返回值,所以三种实现之间没有实际的区别
事实上,在异步函数中,return-fetchFile和return-await-fetchFile之间没有区别
在所有示例中,对fetchFile没有错误处理。如果它拒绝,您将有一个未处理的拒绝。要捕获这些错误,您可以使用try/catch或use.catch来包围wait。三种实现之间的间隔本身没有实际区别。setInterval不注意回调的返回值,因此异步版本返回承诺并不重要 如果要在回调函数中为自己的实现使用wait,可以将其声明为async,但无论使用wait还是.then,这都不会影响事件循环。使用wait,只要您在承诺上点击wait,回调将立即返回,事件循环将能够处理其他事件。如果你这样做的话,情况也是如此。当异步操作正在运行且promise正在等待获得完成通知时,事件循环可以处理其他事件 您可能还想知道这两者之间没有区别:
fn(async()=>{
fetchFile()
}, 1000)
fn(async()=>{
await fetchFile()
}, 1000)
甚至在世界之外。在异步函数的最后一行执行等待不会添加任何内容。这只是多余的。但是,在setInterval的情况下,由于setInterval不关注回调的返回值,所以三种实现之间没有实际的区别
事实上,在异步函数中,return-fetchFile和return-await-fetchFile之间没有区别
在所有示例中,对fetchFile没有错误处理。如果它拒绝,您将有一个未处理的拒绝。要捕获这些错误,您可以使用try/catch或use.catch来包围wait。首先,您将异步函数回调传递给setInterval函数,而setInterval函数不需要异步函数,从而导致您缺少正确的错误处理
所以如果你想运行一些周期函数,我建议这样做,你可以通过错误处理对代码进行更多的控制。请记住,这可能会阻止事件循环,因为您的代码只能通过微任务Queue运行
const util=require'util';
const sleep=util.promisifysetTimeout;
const fetchFile=async=>{
log'some async function';
};
异步函数fetchSomeFile{
试一试{
等待获取文件;
睡眠1000;
获取文件;
}犯错误{
console.logerr;
}
}
fetchSomeFile.catcherr=>console.logerr;
我建议观看好的演示-违背承诺-James Snell,NearForm首先,您将异步函数回调传递给setInterval函数,而setInterval函数不希望异步函数导致您缺少正确的错误处理
所以如果你想运行一些周期函数,我建议这样做,你可以通过错误处理对代码进行更多的控制。请记住,这可能会阻止事件循环,因为您的代码只能通过微任务Queue运行
const util=require'util';
const sleep=util.promisifysetTimeout;
const fetchFile=async=>{
log'some async function';
};
异步函数fetchSomeFile{
试一试{
等待获取文件;
睡眠1000;
获取文件;
}犯错误{
console.logerr;
}
}
fetchSomeFile.catcherr=>console.logerr;
我建议观看好的演示-违背承诺-詹姆斯·斯内尔,NearForm在你的例子中没有实际的区别。所有3个间隔的行为方式都相同。node.js事件循环中的这些间隔是否都相同?是否需要等待获取
要完成的文件?如果我需要等待文件完成,会发生什么。它会阻止事件循环吗?在您的示例中没有实际的区别。所有3个间隔的行为方式都相同。node.js事件循环中的这些间隔是否相同?是否需要等待fetchFile完成?如果需要等待fetchFile完成,会发生什么情况。它会阻止事件循环吗?谢谢。如果我没有捕捉到错误,它会阻止事件循环吗?顺便说一句,什么是任务队列?如果不捕获错误,您可以将应用程序置于不可预测的状态,这是非常糟糕的情况。关于microstack和eventloop,我建议大家阅读这篇博客文章,谢谢。如果我没有捕捉到错误,它会阻止事件循环吗?顺便说一句,什么是任务队列?如果不捕获错误,您可以将应用程序置于不可预测的状态,这是非常糟糕的情况。关于microstack和事件循环,我建议您阅读本系列博客文章