It's quite easy with expl3:
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\newsetcommand}{mm}
{
\seq_new:c { g_setcommand_ \cs_to_str:N #1 _seq }
\seq_gset_split:cnn { g_setcommand_ \cs_to_str:N #1 _seq } {,} {#2}
\cs_new:Npn #1
{
\seq_gpop_left:cN { g_setcommand_ \cs_to_str:N #1 _seq } \l_setcommand_temp_tl
\seq_gput_right:cV { g_setcommand_ \cs_to_str:N #1 _seq } \l_setcommand_temp_tl
\tl_use:N \l_setcommand_temp_tl
}
}
\tl_new:N \l_setcommand_temp_tl
\cs_generate_variant:Nn \seq_gset_split:Nnn { c }
\ExplSyntaxOff
\newsetcommand{\trigger}{out1,out2,out3,out4}
\begin{document}
\trigger
\trigger
\trigger
\trigger
\trigger
\end{document}
You see that \newsetcommand defines a new macro that expands to the successive elements of the list and as many commands of the same type can be defined.
Here's the output:

How it works
\newsetcommand{\trigger}{<list>} defines
A new sequence called \g_setcommand_trigger_seq, containing the ordered list got from the comma separated <list>
A new macro \trigger that at each call pops the leftmost element from the associated sequence, adds it on the right of the sequence and prints it.
Since the popped element is added back at the other end of the sequence, when the last original element is printed, the next will be again the first.
"Classical" implementation
\makeatletter
\newcommand{\newsetcommand}[2]{%
\toks@{}%
\@for\next:=#2\do{%
\toks@=\expandafter{\the\expandafter\toks@\expandafter{\next}}%
}
\expandafter\gdef\csname setcommand\string#1\expandafter\endcsname\expandafter{\the\toks@}%
\edef#1{\noexpand\@usecommand{\string#1}}%
}
\def\@usecommand#1{%
\expandafter\expandafter\expandafter\@@usecommand\csname setcommand#1\endcsname\@nil{#1}\@nil}
\def\@@usecommand#1#2\@nil#3\@nil{%
#1%
\expandafter\gdef\csname setcommand#3\endcsname{#2{#1}}%
}
\makeatother
The syntax is the same as before.
EDIT
Thanks to David Carlisle's answer, this can be simplified:
\makeatletter
\newcommand{\newsetcommand}[2]{%
\global\@namedef{@setcommand\string#1}{#2}%
\edef#1{\noexpand\@usecommand{\string#1}}%
}
\def\@usecommand#1{%
\expandafter\expandafter\expandafter\@@usecommand\csname @setcommand#1\endcsname\@nil#1\@nil
}
\def\@@usecommand#1,#2\@nil#3\@nil{%
\global\@namedef{@setcommand#3}{#2,#1}%
}
\makeatother