1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
| var DataLoader = require('dataloader')
const say=x=>y=>console.log(x,y) superagent=require('superagent') get=u=>superagent.get(u).then(x=>({id:u,content:x.text})) gets=us=>Promise.all(us.map(get)) const {promisify} = require('util'); const each=(f)=>(o={})=> Object.entries(o).forEach(f) const promisifyAll=(c)=>{ let f=([k,v])=>c.__proto__["_"+k]=promisify(v).bind(c) each(f)(c.__proto__) return c } conn=()=>{ var redis = require('redis'); var client = redis.createClient(); promisifyAll(client) return client }
const test_db=async ()=>{ const users=[ { id: 2, name: 'San Francisco' }, { id: 9, name: 'Chicago' }, { id: 1, name: 'New York' }, { id: 'A', name: 'N' }, { id: 'B', name: 'NYork' }, ] cdns=Array(100).fill(0).map((x,i)=>({id:i,name:"ccc"+i})) stories=Array(100).fill(0).map((x,i)=>({id:i,name:"sss"+i})) const nulls=xs=>xs.map(x=>({id:x,name:""})) genUsers=(authToken, ids)=> authToken !== 0 ? nulls(ids) : users.filter(x=>ids.includes(x.id)) genCdnUrls=(authToken, ids)=> authToken !== 0 ? nulls(ids) : cdns.filter(x=>ids.includes(x.id)) genStories=(authToken, ids)=> authToken !== 0 ? nulls(ids): stories.filter(x=>ids.includes(x.id))
createLoaders=(authToken)=>({ user: new DataLoader(async ids => genUsers(authToken, ids),{ cache: true}), cdn: new DataLoader(async rawUrls => genCdnUrls(authToken, rawUrls)), stories: new DataLoader(async keys => genStories(authToken, keys)), })
authToken=0 loaders = createLoaders(authToken) let {user,cdn,stories:s}=loaders { u = await user.load(2); let {id,name}=u user.prime(name, u); user.prime(id , u); c=await cdn.load(id) s=await s.load(id) console.log({u,c,s}) }
uuu=async ()=>{ a=await user.load(1) user.clear(1).prime(1,{id:1,name:"zzz"}) a1=user.prime(1)._promiseCache.get(1) b=await user.loadMany([1,2,9]) c=await user.loadMany([9,1,2]) console.log(a,a1,b,c) }
}
const test_http=async ()=>{ u='https://www.douban.com/group/blabla/discussion?start=' douban = new DataLoader((ids)=>gets(ids.map(x=>u+x))); a=await douban.load(1) b=await douban.loadMany([1,2,9]) console.log(a,b) }
const test_redis=async()=>{ c=conn() redisLoader = new DataLoader(client._mget); a=await redisLoader.load('foo') let [x,y]=await redisLoader.loadMany(["foo","foo"]) let t=await redisLoader.loadMany(["foo","foo1"]) console.log({a,x,y,t}) }
|