Вы используете более старую версию sequelize, которая еще не поддерживает расширение экземпляров с использованием прототипов.
Согласно их документации , более старый способ заключается в предоставлении instanceMethods
const Model = sequelize.define('Model', {
...
}, {
classMethods: {
associate: function (model) {...}
},
instanceMethods: {
someMethod: function () { ...}
}
});
4.X работает, как вы пытались заставить его работать.
while(getchar() != '\n'){
continue;
Он не делает то, что вы думаете.
Вы хотите разорвать первый цикл.
If(getchar() == char_which_breaks_the_loop) break;
Вот пример кода, который работает с использованием вызова select
.
Он , только работает для новой строки, потому что уровень TTY в ядре будет удерживаться до тех пор, пока он не получит новую строку.
Итак, для любого другого символа (например, пробела) нам нужно было бы выполнить вызовы ioctl
, о которых я упоминал в моих главных комментариях, чтобы перевести слой в «сырой» режим (по сравнению со значением по умолчанию «cooked»). , Если вам это нужно, см. tcgetattr
и tcsetattr
звонки.
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <time.h>
#include <sys/time.h>
#include <sys/select.h>
int
main(void)
{
int fd;
char buf[10];
int len;
fd_set rdset;
fd = 0;
while (1) {
// this is do whatever until newline is pressed ...
printf(".");
fflush(stdout);
// set up the select mask -- the list of file descriptors we want to
// wait on for read/input data available
FD_ZERO(&rdset);
FD_SET(fd,&rdset);
// set timeout of 1ms
struct timeval tv;
tv.tv_sec = 0;
tv.tv_usec = 1000;
// wait for action on stdin [or loop if timeout]
// the first arg must be: the highest fd number in the mask + 1
len = select(fd + 1,&rdset,NULL,NULL,&tv);
if (len <= 0)
continue;
// we're guaranteed at least one char of input here
len = read(fd,buf,1);
if (len <= 0)
continue;
// wait for newline -- stop program when we get it
if (buf[0] == '\n')
break;
}
printf("\n");
return 0;
}