鍍金池/ 問答
心上人 回答
都知道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;
    }
}

單眼皮 回答

已自行解決,最后采用的方式是js-cookie,以上有兩個地方需要改動:

1.store/index.js
sessionStorage.setItem('token', res.data.token);換成Cookies.set('token', res.data.token);
2.plugins/axios.js
let token = store().state.TOKEN;換成let token = Cookies.get('token');
存儲和獲取的地方都改成使用Cookies的方式即可

使用js-cookie之前需要安裝和引用,詳情戳鏈接~

祈歡 回答

我試了 確實可以了 只是因為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 錯誤提示)

圖示是我的配置圖,可供參考:

clipboard.png

半心人 回答

為什么不用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 TypeErrorpass, 繼續(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)的功能.