code: func (p *pathObject) ForEach(call goja.FunctionCall) goja.Value {
  	it := p.buildIteratorTree()
  	it.Tagger().Add(TopResultTag)
  	if n := len(call.Arguments); n != 1 && n != 2 {
  		return throwErr(p.s.vm, errArgCount{Got: len(call.Arguments)})
  	}
  	callback := call.Argument(len(call.Arguments) - 1)
  	args := exportArgs(call.Arguments[:len(call.Arguments)-1])
  	limit := -1
  	if len(args) != 0 {
  		limit, _ = toInt(args[0])
  	}
  	err := p.s.runIteratorWithCallback(it, callback, call, limit)
  	if err != nil {
  		return throwErr(p.s.vm, err)
  	}
  	return goja.Null()
  }
docs: // ForEach calls callback(data) for each result, where data is the tag-to-string map as in All case.
  // Signature: (callback) or (limit, callback)
  //
  // Arguments:
  //
  // * `limit` (Optional): An integer value on the first `limit` paths to process.
  // * `callback`: A javascript function of the form `function(data)`
  //
  // Example:
  // 	// javascript
  //	// Simulate query.All().All()
  //	graph.V("<alice>").ForEach(function(d) { g.Emit(d) } )