Javascript 承诺回报值
我知道这个问题在很多方面都被问了好几次。但我真的不明白: 我有一个明确的承诺。我可以对这个对象进行console.log,一切似乎都很好。我能看到,我想看到的 我使用PockDB和NuxtJS(VueJS) 这很有效。我的结果是我期望和希望看到的:Javascript 承诺回报值,javascript,vue.js,promise,Javascript,Vue.js,Promise,我知道这个问题在很多方面都被问了好几次。但我真的不明白: 我有一个明确的承诺。我可以对这个对象进行console.log,一切似乎都很好。我能看到,我想看到的 我使用PockDB和NuxtJS(VueJS) 这很有效。我的结果是我期望和希望看到的: { text: "testen", _id: "2", _rev: "1-c7e7c73d264aa5e6ed6b5cc10df35c5a" } 太好了。但是现在我正在努力返回这个值,以便其他函数可以访问它。尤其是返回这些数据
{
text: "testen",
_id: "2",
_rev: "1-c7e7c73d264aa5e6ed6b5cc10df35c5a"
}
太好了。但是现在我正在努力返回这个值,以便其他函数可以访问它。尤其是返回这些数据。在VueJS中,例如:
// ..
export default {
data() {
return {
doc: testDoc
}
}
}
所以我可以通过实例访问它。但当然,若我这样做,数据就是承诺
data: [
doc: promise
]
但我需要的是价值,而不是它是什么。我不知道如何返回值
我读过好几本如何做的书。我想,我理解回调和承诺的区别。使用和异步函数,我得到了相同的结果。但所有示例都始终与console.log()一起使用。但这对我有用
是否有人可以通过示例热访问此(范围化或嵌套?)值
如果我返回数据:
let testdb = new PouchDB('testdb');
let testDoc = function () {
testdb.get('2').then(function (doc) {
return doc;
}).catch(function (err) {
console.log(err);
});
}
为什么现在没有testDoc
值?或者黑客的价值在哪里
我总是通过将价值提交到vuex商店来实现这一点。这也很有效
let fetchOrga = async function({ store }) {
try {
let orgaDoc = await orgadb.get('orga');
store.commit('orgaUpdate', orgaDoc)
} catch (err) {
console.log(err);
}
}
但正如我所说,我希望通过IndexedDB直接控制这些数据,在您的示例中,testDoc现在包含一个函数。不是承诺,也不是你从允诺者那里得到的
doc
。要获得实际的doc
,您需要进入承诺范围。像这样
let testdb = new PouchDB('testdb');
testdb.get('2').then(function (doc) {
// Your doc is here
console.log(doc);
return doc;
}).catch(function (err) {
console.log(err);
});
或者,您可以使用如下语法
let doc = await testdb.get('2');
// Your doc is here
console.log(doc);
示例中的
testDoc
现在包含一个函数。不是承诺,也不是你从允诺者那里得到的doc
。要获得实际的doc
,您需要进入承诺范围。像这样
let testdb = new PouchDB('testdb');
testdb.get('2').then(function (doc) {
// Your doc is here
console.log(doc);
return doc;
}).catch(function (err) {
console.log(err);
});
或者,您可以使用如下语法
let doc = await testdb.get('2');
// Your doc is here
console.log(doc);
在安装组件时,您应该更新您的
状态文档
,然后您的文档将可用于组件中的任何位置
export default {
data() {
return {
doc: [],
error : ""
}
},
mounted: () => {
testdb.get('2').then(doc => {
this.doc = doc;
}).catch(function(err) {
this.error = err;
});
}
}
在安装组件时,您应该更新您的
状态文档
,然后您的文档将可用于组件中的任何位置
export default {
data() {
return {
doc: [],
error : ""
}
},
mounted: () => {
testdb.get('2').then(doc => {
this.doc = doc;
}).catch(function(err) {
this.error = err;
});
}
}
您可以使用等待承诺解决:
// nuxt.js way
async asyncData() {
let testdb = new PouchDB('testdb');
return {
doc: await testdb.get('2'),
};
},
UPD(通过评论): 您可以使用等待承诺解决:
// nuxt.js way
async asyncData() {
let testdb = new PouchDB('testdb');
return {
doc: await testdb.get('2'),
};
},
UPD(通过评论):
好的,好的。但是如何从该函数外部访问此
doc
?您可以返回承诺,也可以在wait
示例中将其作为正常变量返回。无论哪种方式,要在另一个函数中获得它,您都需要执行相同的过程。您可以使用.then()
或async/await
ok来调用它。但是如何从该函数外部访问此doc
?您可以返回承诺,也可以在wait
示例中将其作为正常变量返回。无论哪种方式,要在另一个函数中获得它,您都需要执行相同的过程。您可以使用.then()
或async/await
调用它,该函数可能重复:。您需要有两个返回,一个在promise函数中,另一个用于testdb函数。您无法获取该值,因为您没有从testdb函数返回任何内容。或者最好改用async/await。的可能重复项:。您需要有两个返回,一个在promise函数中,另一个用于testdb函数。您无法获取该值,因为您没有从testdb函数返回任何内容。或者最好改用async/wait。使用async/wait
的好方法,但我不建议使用这种方法,因为它会影响组件的装载,而且您对错误没有太多的控制权。也可以想象一下,如果您想在这之前添加加载程序……哦。。。你是对的!Nuxt页有异步数据,但组件-没有。我会更新答案的。哇。呜呜。非常感谢你。这符合我的需要。现在是我可以访问的对象。是的,它在nuxt页面上,而不是在component中。使用async/wait
的好方法,但我不建议使用这种方法,因为它会影响组件的装载,而且您对错误没有太多的控制,还可以想象一下,如果您想在此之前添加某个加载程序……哦。。。你是对的!Nuxt页有异步数据,但组件-没有。我会更新答案的。哇。呜呜。非常感谢你。这符合我的需要。现在是我可以访问的对象。是的,它在nuxt页面上,而不是在组件中。