都知道node的異步讓它搞什么定時功能都不方便
這個還真不知道,除了時間不太準(有別的任務在執(zhí)行沒空檢測timer
)。node
有很多模塊如 node-schedule可以處理定時任務。
比如啟動定時器A后,一秒鐘后執(zhí)行funtion B。但只要中途出現(xiàn)了事件C,那么即時觸發(fā)functionD,然后A重新記時。像這種功能該如何實現(xiàn)?
當然如果你的需求只是這樣其實處理起來也很簡單,舉個栗子。
const EventEmitter = require('events');
class MyTimerEmitter extends EventEmitter {
constructor() {
super();
this._timerA = null;
}
run() {
this._timerA = setTimeout(() => { console.log('finish') }, 1000)
}
reset() {
clearTimeout(this._timerA);
this.run();
}
}
const mte = new MyTimerEmitter();
mte.on('reset', function() {
console.log('reset!');
this.reset();
});
mte.run();
function test(i = 0) { //測試途中觸發(fā)了10次reset事件
if (i < 10) {
i++;
setTimeout((j) => {
mte.emit('reset');
test(j);
}, 500, i)
}
}
test()
this.loadProgress 是渲染頁面的時候會把獲取的值帶上去,
但是不是實時變化的值,需要添加偵聽。
謝邀
List<Integer> list1 = new ArrayList<Integer>();
list1.addAll(Arrays.asList(new Integer[]{1,2,3,4,5,6}));
List<Integer> list2 = new ArrayList<Integer>();
list2.addAll(Arrays.asList(new Integer[]{3,5,6}));
for(Integer var2 : list2){
for(Integer var1 : list1){
if(var2.equals(var1)){
System.out.println("do something");
}
}
}
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.UUID;
public class Test {
public static void main(String[] args) throws Exception {
//對象
List<Model> list1 = new ArrayList<Model>();
list1.add(new Model(1,"11"));
list1.add(new Model(2,"33"));
list1.add(new Model(3,"33"));
List<Model> list2 = new ArrayList<Model>();
list2.add(new Model(1,"11"));
list2.add(new Model(2,"33"));
list2.add(new Model(3,"33"));
for(Model m2 : list2){
for(Model m1 : list1){
if(m1.getAttr2().equals(m2.getAttr2())){
System.out.println("do something");
}
}
}
/**可以簡單封裝下,寫一個通用的流程,這里使用Comparator接口**/
//使用通用的方法 Object
compareSomething(list1,list2,new Comparator<Model>() {
@Override
public int compare(Model o1,Model o2) {
return o1.getAttr2().compareTo(o2.getAttr2());
}
});
//使用通用的方法 Integer
List<Integer> list3 = new ArrayList<Integer>();
list3.addAll(Arrays.asList(new Integer[]{1,2,3,4,5,6}));
List<Integer> list4 = new ArrayList<Integer>();
list4.addAll(Arrays.asList(new Integer[]{3,5,6}));
compareSomething(list3,list4,new Comparator<Integer>() {
@Override
public int compare(Integer o1,Integer o2) {
return o1.compareTo(o2);
}
});
}
public static <T> void compareSomething(List<T> list1,List<T> list2,Comparator<T> compare){
for(T m2 : list2){
for(T m1 : list1){
if(0 == compare.compare(m1, m2)){
System.out.println("do something");
}
}
}
}
}
class Model{
private Integer attr1 = 1;
private String attr2 = UUID.randomUUID().toString();
public Model(){
}
public Model(Integer attr1,String attr2){
this.attr1 = attr1;
this.attr2 = attr2;
}
public Integer getAttr1() {
return attr1;
}
public void setAttr1(Integer attr1) {
this.attr1 = attr1;
}
public String getAttr2() {
return attr2;
}
public void setAttr2(String attr2) {
this.attr2 = attr2;
}
}
我試了 確實可以了 只是因為axios是異步所以放在actions里面嗎
這是tp5的機制,自動默認加載當前模塊下的配置文件??梢哉{(diào)用b模塊的函數(shù)前,先動態(tài)加載b模版的函數(shù)。
Config::load(APP_PATH.'b/config.php');
我看一下tp5.1的源碼, config的load類如下。
/**
* 加載配置文件(多種格式)
* @access public
* @param string $file 配置文件名
* @param string $name 一級配置名
* @return mixed
*/
public function load($file, $name = '')
{
if (is_file($file)) {
$name = strtolower($name);
$type = pathinfo($file, PATHINFO_EXTENSION);
if ('php' == $type) {
return $this->set(include $file, $name);
} elseif ('yaml' == $type && function_exists('yaml_parse_file')) {
return $this->set(yaml_parse_file($file), $name);
}
return $this->parse($file, $type, $name);
}
return $this->config;
}
file的參數(shù)可以如下:
$obj->load('../application/b/config.php');
不嫌麻煩的,我建議定義一個常量APP_PATH
1.虛擬域名指向/var/wwwroot/abc/public
2.Nginx.conf 配置忽略index:
if (!-e $request_filename){
rewrite ^(.*)$ /index.php?s=$1 last;
break;
}
3..htaccess如果啟用了,可以試試這個配置
<IfModule mod_rewrite.c>
Options +FollowSymlinks -Multiviews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [L,E=PATH_INFO:$1]
</IfModule>
4.runtime是否有足夠權(quán)限
如果還不行,可以看看nginx的日志,或者php-fpm日志(打開 php.ini 搜索 display_errors,把 Off 修改為 On就開啟了 php 錯誤提示)
圖示是我的配置圖,可供參考:
nginx 就夠了
為什么不用button元素?
button元素可以用onclick屬性啊。
會不會是客戶端關閉了cookie?。?/p>
https://codepen.io/caocong/pe...
直接從snapchat copy了相關的css 然后精簡了一下就是這樣的效果
user_id(7) 和 id(3) 不是在同一列嗎?
你這個可以理解為折線圖啊。
app可以自定義微信分享吧
https://open.weixin.qq.com/cg...
既然有些人那么喜歡點踩,那我就親自試了一下
APP自定義微信分享在微信開放平臺申請移動應用,我一直到做到看到提交審核的按鈕這一步,并沒有要求我注冊微信公眾號,自定義微信分享內(nèi)容并不一定需要注冊微信公眾號,某些人滿意了嗎?
感覺你需要的是洗牌算法,洗牌算法就是shuffle
函數(shù)。
setState
到變量值改變是有一個過程的,并不是同步執(zhí)行。就一個計時器的秒數(shù),沒必要放到state中?;蛘吣阍?code>componentDidMount中把秒數(shù)緩存(即需要多少秒),直接基于這個緩存變量修改。如:
let {countDown} = this.state;
//...
-countDown;
看下大佬的文章就知道了 手摸手,帶你用vue擼后臺 系列二(登錄權(quán)限篇)
沒啥特殊需求老老實實把路由寫到前端吧,寫到接口里面就是自己跟自己搞事情。
一句就能搞定:
const listA = [1, 2, 3]
const listB = [2, 3, 1]
const result = listA.length === listB.length && listA.every(a => listB.some(b => a === b)) && listB.every(_b => listA.some(_a => _a === _b));
console.log(result);
//true
程序是對的, 給的例子也是對的, 我認為上面的程序不應當報錯.
這段程序設計flatten
函數(shù)的意義是將樹形結(jié)構(gòu)按照深度優(yōu)先順序進行迭代. 可以實現(xiàn)將一個樹形結(jié)構(gòu)"壓扁"成列表結(jié)構(gòu).
比如:
tree = [
['1', 2, [3]],
['4', 5]
]
list(flatten(tree)) # 得到 ['1', 2, 3, '4', 5]
而對于這段代碼
# 不迭代類似于字符串的對象
try:
nested + ''
except TypeError:
pass
else:
raise TypeError
注釋標明了是為了不迭代字符串對象. 如果缺少了這一段, 那么程序就會在遇到迭代對象中包含字符串的時候陷入一直迭代的無限循環(huán). 這是因為字符串也是可迭代對象.
比如輸入'abc'
, 那么原函數(shù)里層try語句就會raise TypeError
, 這個TypeError
被外層try語句except TypeError
捕捉到, 就直接將'abc'
作為迭代結(jié)果輸出去了.
如果輸入不可迭代對象, 比如123
, 那么在執(zhí)行nested + ''
的時候就會因為except TypeError
而pass
, 繼續(xù)執(zhí)行for sublist in nested
, 但是123
是int類型, 不是可迭代對象, 所以會拋出TypeError: 'int' object is not iterable
, 這個錯誤同樣被外層的try語句捕捉到, 123
就作為迭代結(jié)果輸出.
只有非字符串的可迭代對象才會進入for sublist in nested
中.
如果缺少了里面那個try語句, 那么就會執(zhí)行for sublist in nested:
, 這里的nested
就是'abc'
, 那么就會迭代'a', 'b', 'c'
, 迭代到'a'
的時候返回'a'
, 由于'a'
又是可迭代的, 于是又迭代返回'a'
, 這樣程序就會陷入一直迭代'a'
的無限循環(huán)過程, 最后會拋出RecursionError
.
所以flatten
這個函數(shù)的設計是沒問題的, 它完成了設計者期待它需要實現(xiàn)的功能.
北大青鳥APTECH成立于1999年。依托北京大學優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
北大青鳥中博軟件學院創(chuàng)立于2003年,作為華東區(qū)著名互聯(lián)網(wǎng)學院和江蘇省首批服務外包人才培訓基地,中博成功培育了近30000名軟件工程師走向高薪崗位,合作企業(yè)超4
中公教育集團創(chuàng)建于1999年,經(jīng)過二十年潛心發(fā)展,已由一家北大畢業(yè)生自主創(chuàng)業(yè)的信息技術(shù)與教育服務機構(gòu),發(fā)展為教育服務業(yè)的綜合性企業(yè)集團,成為集合面授教學培訓、網(wǎng)
達內(nèi)教育集團成立于2002年,是一家由留學海歸創(chuàng)辦的高端職業(yè)教育培訓機構(gòu),是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
浪潮集團項目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺面向?qū)ο箝_發(fā)經(jīng)驗,技術(shù)功底深厚。 授課風格 授課風格清新自然、條理清晰、主次分明、重點難點突出、引人入勝。
曾工作于聯(lián)想擔任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔任項目經(jīng)理從事移動互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍懿科技有限責任公司從事總經(jīng)理職務負責iOS教學及管理工作。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應用開發(fā)經(jīng)驗。曾經(jīng)歷任德國Software AG 技術(shù)顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。