需要帮助理解Node异步。

时间:2018-02-25 19:59:36

标签: javascript node.js asynchronous

所以我是学习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

1 个答案:

答案 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);