【问题标题】:Node js with fs and setInterval带有 fs 和 setInterval 的节点 js
【发布时间】:2019-04-01 03:15:47
【问题描述】:

此代码出现错误“回调必须是函数”

function saveCallback() {console.log("Sauvegarde du json")}
bot.login(TOKEN)
var test = '{"channelAlias":[]}'
setInterval(fs.writeFile('stockage.json',test,saveCallback), 300000)

【问题讨论】:

  • 您能否准确分享错误内容或错误提供的其他信息。有两个回调,用于 setInterval 和 fs.writeFile。你在看哪一个?

标签: javascript node.js json fs


【解决方案1】:

试试

function saveCallback() {console.log("Sauvegarde du json")}
bot.login(TOKEN)
var test = '{"channelAlias":[]}'
setInterval(() => { 
  fs.writeFile('stockage.json',test,saveCallback)
}, 300000)

setInterval的签名是setInterval(callbackFUNCTION, time)

【讨论】:

  • fs.writeFile() 不是函数吗?
  • 这可能已经解决了问题,但仍然没有说明直接调用有什么问题。试试这个setInterval(console.log("Hello"), 1000);,没有错误。那么fs.writeFile() 出了什么问题。
  • @NAVIN fs.writeFile 是一个函数,但 fs.writeFile() 是一个 void。所以 300 秒后 void 将被调用,这显然是 "Callback must be a function" 错误。
【解决方案2】:
const saveCallback = () => {
    console.log(`Sauvegarde du json`)
}
bot.login(TOKEN)
const test = `{ "channelAlias": [] }`
setInterval(() => fs.writeFile(`./stockage.json`, test, saveCallback), 300000)

【讨论】:

  • 我不会投反对票,但这是解决问题的方法。 fs.writeFile 是一个函数。那为什么还是报错不是函数呢?
  • 请将此作为答案,这看起来不像是解决方案。
【解决方案3】:
var fs = require('fs')
function saveCallback() {console.log("Sauvegarde du json")}
var test = '{"channelAlias":[]}'
setInterval(function(){fs.writeFile('stockage.json',test,saveCallback)}, 3000)

请看区别

下面不会出错

function willReturnFunction(){
    return function(){
        console.log("welcome")
    }
}
setInterval(willReturnFunction(),1000)

下面会给出错误(你的情况

function willNotReturnFunction(){
    //returning something other than funtion
    // like fs.wrtiteFile function
    return "some string"
}
setInterval(willNotReturnFunction(),1000)

我希望这会有所帮助!纳文

【讨论】:

  • 我不会投反对票,但这是解决问题的方法。 fs.writeFile 是一个函数。那为什么还是报错不是函数呢?
  • function(){fs.writeFile()} 与直接传递 fs.writeFile().... 之间存在差异。这是您尝试执行的操作将调用 fs.writeFile() 为一旦它执行 setInterval。并且 fs.WriteFile 不返回函数,因此给出错误回调必须是“函数”。我所做的是给它一个功能。所以唯一的区别是,......在一个你自己调用函数和另一个你将函数赋予 setinterval 以便它做它想做的事情
  • fs.writeFile() 不返回任何内容,它需要一个回调函数进行跟进。 fs.writeFile() 是异步函数,所有异步都没有返回值,有些可能返回 promisepromise 是一个函数。您试图通过返回一个值来欺骗willNotReturnFunction(),但fs.writeFile 不返回一个值。如果你做willNotReturnFunction() {console.log("some string");} 并且什么都不返回,那么setInterval() 不会给出错误。是的,它将立即被调用,而不是从 setInterval 但没有错误。试试这个setInterval(console.log("Hello"),1000)
猜你喜欢
  • 2016-08-26
  • 2016-12-06
  • 2015-07-22
  • 1970-01-01
  • 1970-01-01
  • 2018-12-26
  • 1970-01-01
  • 2018-03-01
  • 1970-01-01
相关资源
最近更新 更多