所以我是学习Node的初学者,并试图理解它的异步部分。 class CurveContainer : ConstraintLayout{
var mainPaint = Paint()
var mShadowPaint = Paint()
var mainPath = Path()
var xWidth = 0f
var xHeight = 0f
var biezerYValue = 50
constructor(context: Context?) : super(context){
init()
}
constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs) {
init()
}
constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr){
init()
}
open fun setBiezerY(y : Int){
biezerYValue = y
invalidate()
}
private fun init() {
mainPaint.color = ContextCompat.getColor(context, R.color.showContainer)
mainPaint.style = Paint.Style.FILL
mainPaint.isAntiAlias = true
}
override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec)
xWidth = measuredWidth.toFloat()
xHeight = measuredHeight.toFloat()
invalidate()
}
override fun onDraw(canvas: Canvas?) {
super.onDraw(canvas)
mainPath.reset()
canvas!!.drawColor(Color.TRANSPARENT)
mainPath.moveTo(0f, 0f)
mainPath.lineTo(xWidth, 0f)
mainPath.lineTo(xWidth, xHeight - biezerYValue)
mainPath.quadTo(xWidth/2, xHeight + biezerYValue - 10, 0f, xHeight - biezerYValue)
mainPath.lineTo(0f, 0f)
canvas!!.drawPath(mainPath, mainPaint)
}
}
中的以下代码应等待readIn
完成,然后执行readFile
以更新whenDone
变量,但无论我传入的值是什么,因为它始终显示arr是空的。我不认为arr
曾经发生变异,或者arr
函数从未等待whenDone
完成。
有人可以解释一下我做错了什么或被误解了吗?
谢谢
readFile
答案 0 :(得分:0)
readFile
函数是异步的,因此它将控制权返回给调用者。
你应该像这样重写:
var fs = require('fs');
function readIn(callback){
fs.readFile(process.argv[2],'utf8',function whenDone(err, fileContent){
var arr = fileContent.split('\n');
callback(arr);
})
}
function printOut(arr){
console.log(arr);
}
readIn(printOut);