使用promise封装setTimeout

使用 Promise 对 setTimeout 进行封装,从而支持链式的调用。

const delay = (func, millisec, options) => {
  let timer = 0
  let reject = null
  const promise = new Promise((resolve, _reject) => {
    reject = _reject
    timer = setTimeout(() => {
      resolve(func(options))
    }, millisec)
  })

  return {
    get promise() {
      return promise
    },
    cancel() {
      if (timer) {
        clearTimeout(timer)
        timer = 0
        reject(new Error('timer is cancelled'))
        reject = null
      }
    },
  }
}

使用🌰:

const d = delay(({a, b}) => {
  console.log(a, b)
  return a + b
}, 2000, {a: 1, b: 3})

d.promise.then((result) => {
  console.log('result', result)
}).catch((err) => {
  console.log(err)
})

// cancel
// setTimeout(() => {
//   d.cancel()
// }, 1000)

认识柯里化(currying)

看文章的时候发现了柯里化一词,然而心中毫无概念,于是就查阅了相关资料有了些许认识。

前端错误捕获以及ajax监听

上线的项目难免会有错误,通过分析日志能够有效、准确地定位、重现并解决错误,从而提升产品体验。以下是根据资料以及目前需求所实现的一个前端日志采集的方案。

JS变量提升

变量提升即将变量声明提升到它所在作用域的最开始的部分,ES6 之前 JS 只有全局作用域和函数作用域,ES6 加入了块级作用域,用一对花括号{}包裹的部分。变量提升会将函数声明和部分变量声明提升到作用域顶端。例子如下:

CSS小知识

记录 CSS 一些有用、易忘的知识。

2017-12-07
|
查看全文

JS监听一个变量的变化

js 监听一个值的变化,当值变化之后能够触发一些操作。

IndexedDB的简单使用

使用 IndexedDB 在前端对数据进行缓存,简单记录用法。

IndexedDB 是一种低级 API,用于客户端存储大量结构化数据(包括, 文件/ blobs)。该 API 使用索引来实现对该数据的高性能搜索。

Node.js 学习搭建

听说 Node.js 是开启 JavaScript 后端开发之旅的技术,学习一下服务器的搭建过程。

ajax请求缓存

浏览器的 GET 请求默认会有缓存,包括 ajax 的 GET 请求。

如果两次请求的 url 相同的话,浏览器(不同缓存机制的浏览器会有所不同)会直接读取缓存里第一次请求的结果给第二次请求。

缓存要缓存的好处,但有时我们并不需要 ajax 的请求被缓存。解决方式很简单只需更改请求的 url 即可,常用的就是加上时间戳,如下:

ajax(`https://example.com?t=${Date.now()}`)

Linux-安装、部署 Node.js

CentOS 云主机上安装 Node.js,部署 node 应用。