function _waitForAllProgramsLinkCompletionAsync() {
  _waitForAllProgramsLinkCompletionAsync = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(gl, programs) {
    var _i3, _Object$values2, program;
    return _regeneratorRuntime().wrap(function _callee2$(_context2) {
      while (1) switch (_context2.prev = _context2.next) {
        case 0:
          _i3 = 0, _Object$values2 = Object.values(programs);
        case 1:
          if (!(_i3 < _Object$values2.length)) {
            _context2.next = 8;
            break;
          }
          program = _Object$values2[_i3];
          _context2.next = 5;
          return waitForProgramLinkCompletionAsync(gl, program);
        case 5:
          _i3++;
          _context2.next = 1;
          break;
        case 8:
        case "end":
          return _context2.stop();
      }
    }, _callee2);
  }));
  return _waitForAllProgramsLinkCompletionAsync.apply(this, arguments);
}
Check a program's link status
@param {WebGLRenderingContext} gl The WebGLRenderingContext to use.
@param {WebGLProgram} program Program to check
@param {ErrorCallback} [errFn] func for errors
@return {string?} errors if program is failed, else undefined
@private