的代碼可以在我的回購here可以找到,但我會貼:爲什麼我不能通過從數組中調用它的解析器來解決承諾?
function asyncQueue() {
'use strict'
let i = -1
let j = 0
const resolvers = []
function put (p) {
if (!p.then)
p = Promise.resolve(p)
if (resolvers[j] instanceof Array) {
const done = resolvers[j][0]
const fail = resolvers[j][1]
p.then(a => done(a)).catch(e => fail(e))
} else {
resolvers[j] = p
}
++j
}
function get() {
++i
if (resolvers[i] instanceof Promise)
return resolvers[i]
return new Promise((resolve, reject) => resolvers[i] = [resolve, reject])
}
return {
get: get,
put: put
}
}
美中不足的是,在作爲節點5.4,如果我們改變將函數像這樣:
if (resolvers[j] instanceof Array) {
p.then(a => resolvers[j][0](a)).catch(e => resolvers[j][1](e))
} else {
resolvers[j] = p
}
這些解析器所屬的承諾從來沒有履行。 WAT?
我花了一個小時試圖弄清楚我做錯了什麼,但後來決定只是綁定resolver refs並繼續前進。任何人都不知道爲什麼從數組poo poos內聯調用函數?我注意到a
是我們期望的值,但是通過這種方式將它傳遞給解析器會使所有者Promise處於未決狀態,就好像我從未解僱過解析器。
什麼是asyncQueue?它應該做什麼? – elclanrs
WAT它是......它就像整個「你不應該做的」在一段代碼中。 :) – Microfed
你爲什麼不喜歡亞馬遜這麼多... –