Javascript 如何使用ES6从承诺返回多个值?
我有一系列的功能。 在此过程中,我需要跟踪2个临时变量Javascript 如何使用ES6从承诺返回多个值?,javascript,es6-promise,Javascript,Es6 Promise,我有一系列的功能。 在此过程中,我需要跟踪2个临时变量 let key="string" ... .then(done => { localforage.setItem("key",key) console.log ("done: "+done) // WORKS return done }).then(done => { let carto = localforage.getItem(&qu
let key="string"
...
.then(done => {
localforage.setItem("key",key)
console.log ("done: "+done) // WORKS
return done
}).then(done => {
let carto = localforage.getItem("key")
return [carto, done]
}).then(([carto, done]) => {
console.log ("done: "+done) // WORKS
console.log ("carto: "+carto) // FAILS
看起来上一次返回[carto,done]
的值(done
)一出现,就会立即执行
如果我用return carto
替换它,它将等待,并且carto具有正确的类型
但是当返回[carto,done]
时,控制台抛出:
carto:[对象承诺]
如何在不使用全局变量的情况下在链中传递多个变量
编辑:我使用Svelte,它不想等待异步函数。您需要使用
承诺。所有,但有点奇怪-将先前中的完成的传递给它。然后(这不是承诺,而是一个普通值),并将新的carto传递给它,这实际上是一个承诺。单数carto
解析后,它将解析为两个值
})
.then(done => Promise.all([
localforage.getItem("key"),
done,
])
.then(([carto, done]) => {
但是考虑使用<代码>等待<代码>,它使这些类型的东西变得更加干净。
setItem
还返回您应该等待的承诺
const done = whateverPromiseDoneCameFrom;
await localforage.setItem("key",key);
const carto = await localforage.getItem("key");
setItem
是异步的,顺便说一句。这似乎可以通过async/await
语法简化,不是吗?真的吗?这是本地饲料,不是本地存储。我以为它是异步的,嗯,不,你是对的,还有一个异步的getItem
。我认为Digital Ocean docs是错误的。谢谢,但我使用的是Svelte,它不希望Wait脱离异步函数。@phm使函数异步以便使用Wait
,当然。@CertainPerformance,感谢您的承诺。所有解决方案都有效!我认为我需要重新思考我的所有流程,并了解承诺。all:)