Just a guess, but can you try without the extra trailing comma in the promoChoice? I am not sure what happens there when after splitting at the commas the last element in the array it obtains is an empty string (which is not a valid piece name). In morph it might work, because that has special code for extending the line to a full rank when there are missing squares (and 'undefined' and the empty string might be considered the same). But when it occurs in promoChoice the I.D. might actually try to use it as a piece.
Just a guess, but can you try without the extra trailing comma in the promoChoice? I am not sure what happens there when after splitting at the commas the last element in the array it obtains is an empty string (which is not a valid piece name). In morph it might work, because that has special code for extending the line to a full rank when there are missing squares (and 'undefined' and the empty string might be considered the same). But when it occurs in promoChoice the I.D. might actually try to use it as a piece.