Javascript 沿着承诺链传递价值观
所以,我对异步非常陌生,我无法理解它是如何工作的,因为我可以理解它,但当我执行它时,似乎我没有 所以,我有一个代码,我试图连续运行承诺,并携带变量,如果它遇到错误,它将被捕获 下面是我正在尝试的简单代码:Javascript 沿着承诺链传递价值观,javascript,node.js,promise,Javascript,Node.js,Promise,所以,我对异步非常陌生,我无法理解它是如何工作的,因为我可以理解它,但当我执行它时,似乎我没有 所以,我有一个代码,我试图连续运行承诺,并携带变量,如果它遇到错误,它将被捕获 下面是我正在尝试的简单代码: var x = new Promise(function(resolve, reject) { var one = 1 resolve(one) // if error happens go to catch }) .then(function(value) { var two
var x = new Promise(function(resolve, reject) {
var one = 1
resolve(one)
// if error happens go to catch
})
.then(function(value) {
var two = 2;
resolve(two);
// if error happens go to catch
})
.then(function(value) {
var three = 3;
resolve(three);
// if error happens go to catch
})
.then(function(value) {
console.log(one + two + three);
})
.catch(function(value) {
// reverse all the execution
})
x;
我正在创造一个承诺
第一个承诺,用于循环包含要插入的某些对象
第二个承诺将在我的第一个表中插入一些行
第三个承诺将插入第一个表中的一些行和第二个承诺中的一些结果
第四个承诺会完成一些事情,等等
以及一个捕获,它将删除由错误插入和剪切的数据
这就是我试图想象的逻辑、代码和执行
顺便说一句,我正在使用mysql。对于能够帮助我的人,请,我需要你。谢谢
如果您对我正在转换的真实代码感到好奇,这就是我目前所做的:
我在这里使用了一些just promise,我想如果我使用promise链接,我可以缩短或清理我的代码。在回调中,你把它放在“then”中,你不需要调用resolve()来调用链的下一步。您只需要返回一些值,链的下一步将接收它作为参数 您可能混淆了承诺的创建和链接方式。创建承诺时,向其构造函数提供回调,其参数为“resolve”和“reject”,它们也是回调。它们预期将由promise构造函数中回调内的代码调用。调用resolve时,承诺将使用您提供的值进行解析。拒绝也一样
这个话题确实令人困惑,我建议您仔细看看人们是如何连锁承诺的,以及人们是如何创建自定义承诺的 下面介绍如何通过创建累加器对象向下传递值,然后在每个步骤中添加result属性,从而将值向下传递承诺链:
//承诺
var one=新承诺((解决、拒绝)=>{
决议(1)
})
风险值二=新承诺((解决、拒绝)=>{
决议(2)
})
风险值三=新承诺((解决、拒绝)=>{
决议(3)
})
//承诺链
一个。然后(一=>{
返回({one})
})
。然后(acc=>{
返回2。然后(2=>({…acc,2}))
})
。然后(acc=>{
返回三。然后(三=>({…acc,三}))
})
。然后(结果=>{
console.log(结果)
})
.catch(错误=>{
console.error(“一个、两个或三个失败”,err)
})
请您向我们展示您的真实代码或真实问题,而不是这些虚构的代码。然后,我们可以向您展示解决实际问题的正确方法。这个虚构的代码没有任何意义,因为只有对resolve()
的第一次调用在参数resolve
的范围内,所以其他调用都不起作用。这只是一个猜测(因为代码没有意义),但您可能想做的是在任何中抛出一些错误。然后()
处理程序将其转到结尾处的.catch()
。顺便说一句,如果您想向下一个承诺返回值,只需使用return
,而不是resolve
。好的,你希望这样。这里:LMAO Thankssss这是否意味着我需要先创建承诺,然后才能链接它们?Sorry@CherylBlossom您的DB方法是否返回承诺?您使用哪个节点模块与数据库通信?如果他们已经在兑现承诺,那么你只需要把他们拴起来。如果他们使用回调,那么你需要用承诺来包装它们。我只使用mysqljs,我需要一些最后插入的键和循环中类似对象的数组。这是到目前为止我的代码。这太混乱了,我所做的承诺基本上是我写的,但我不明白我是怎么做的,为什么这么做的。很抱歉,非常感谢。是的,它似乎不支持承诺,所以如果您想使用承诺,您必须将每个db.query
包装在承诺中。哦,我明白了。你们有并没有推荐任何类似php的mysql节点模块来进行数据库通信,或者我下次可以使用的更简单的方法?但是说真的,非常感谢你,很抱歉让人讨厌。