让我们说用户正在点击一个按钮,时间就是,假设为0
首先要处理请求服务器端,就是再次花时间,这次也说它为0,存储在名为currenttime
的var中(带new Date().getTime()
)
然后服务器正在运行,事情需要时间,直到它调用一个函数来存储时间,并给用户一些等待时间。
问题是,假设我将当前时间变量发送到函数并保存,并添加让我们说90分钟(1 1/2小时)。然后客户端,我检索用户需要等待的时间。 但在这种情况下,结果是90分钟(有些exstra秒,大约15-30秒)。
从发送请求到服务器,我怎样才能确保用户不需要等待超过90分钟?
函数调用:
// after processing things this occurs
userData.updateTimers(userid, whattotime, 5400,currenttime);
5400是5400秒,90分钟。
currenttime是new Date().getTime()
在查询中首先检索的变量。
语言功能:
function updateTimers(userid,type,sec,time) {
return new Promise( function (resolve, reject) {
var newtime = time + (sec * 1000);
var updateObj = {};
updateObj[type] = newtime;
usertimers.update({userid: userid},{$set: updateObj}).then(function (result) {
console.log("updated timers");
console.log(result);
return resolve(result);
})
});
}
再次,我怎样才能确保它的90分钟,而不是包括处理时间? 我需要准确更新计时器。
我使用AngularJS前端的平均堆栈。将时间花在那里并将其置于服务器端以备将来使用,或者它能做得更好吗?
是一种解决方法吗?因为无论我做什么服务器支持并添加一些等待时间,它总是会多几秒钟:/
答案 0 :(得分:0)
使用勾选的@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
if (getArguments().getInt(ARG_SECTION_NUMBER) == 2) {
View rootView = inflater.inflate(R.layout.fragment_blank, container, false);
return rootView;
} else if (getArguments().getInt(ARG_SECTION_NUMBER) == 1) {
View rootView = inflater.inflate(R.layout.fragment_sub_page02, container, false);
Button mButton = (Button) rootView.findViewById(R.id.button);
mButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// here you set what you want to do when user clicks your button,
}
});
return rootView;
} else {
View rootView = inflater.inflate(R.layout.fragment_main, container, false);
return rootView;
}
}
并测试日期偏移。
然后您可以发送"完成"的日期(watchdog
)给用户。
new Date().getTime() + (1000 * 60 * 90)

答案 1 :(得分:0)
如果我了解您的问题,您可以使用类似Promise.timeout
的内容:
Promise.timeout = function(timeout, promise){
return Promise.race([
promise,
new Promise(function(resolve, reject){
setTimeout(function() { reject('Timed out'); }, timeout);
})
]);
}
您可以这样使用它:
Promise.timeout(yourRequestFunctionWhenUserClicksButton(), 1000 * 90); //90 seconds
基本上,如果请求持续超过90秒,它将返回被拒绝的承诺,否则它将满足服务器应答的值。