【发布时间】:2018-04-26 04:02:42
【问题描述】:
我需要创建一个函数,它接收一个 Promise 作为第一个参数及其参数的数组(如果它至少有一个),如果没有,则为 null。
我的函数看起来是这样的:
var executeMappingStep = (promiseStatus, myPromise, myPromiseParams) => {
return new Promise((resolve, reject) => {
//if the execution was success, there's no need to invoke myPromise again
if(promiseStatus.success == true)
return resolve(promiseStatus.previousResponseSaved);
if (myPromiseParams!= null) {
//how I resolve this logic is my doubt
myPromise.addArrayOfParameters(myPromiseParams);
}
myPromise().then(result => resolve(result)).catch(err => reject(err));
});
};
我正在阅读 .bind() 函数,该函数适用于函数,但不适用于 this question 的承诺。我还看到了一些关于 .apply() 函数的内容,但这似乎不是我所需要的。
编辑
当没有参数时,我的函数像 myFirstPromise 一样被调用,而当我至少有一个参数时,像 mySecondPromise 一样:
var executePromises = (myFirstPromise, mySecondPromisePromise) => {
return new Promise((resolve, reject) => {
//retrieve an array of every promise status
var promisesStatus = getPromisesStatus();
executeMappingStep(promisesStatus[0], myFirstPromise, null).then(result => {
return convertToXml(result);
}).then(result => {
var parameters = {
value1 : result,
value2: [1,2,3],
value3: "some string",
value4: 10
};
return executeMappingStep(promisesStatus[1], mySecondPromisePromise, parameters);
}).then(result => resolve(result)).catch(err => reject(err));
});
};
var myFirstPromise = function() {
return new Promise(function (resolve, reject) {
//some logic for first promise
});
}
var mySecondPromise = function(firstParam, secondParam, thirdParam, fourthParam) {
return new Promise(function (resolve, reject) {
//some logic for second promise with its params
});
}
可能,在函数 addArrayOfParameters 中,我需要循环到对象上的每个属性(我意识到数组不起作用),例如 this
有没有办法在数组解析之前以编程方式添加参数?
编辑 2
这个逻辑背后的原因很复杂,但这正是我需要解决的问题。基本上,在我的代码中,每个 promise 都可以在错误的情况下执行,并且 executePromises 函数中涉及一个逻辑,它返回每个 promise 的状态,无论是否成功执行。这个逻辑涉及超过 10 个链接的 Promise,如果其中一些失败,例如:Promise 编号 5,然后是 6,7 等,将不得不在某个管理后端再次调用。
我不会为每个承诺复制逻辑,因此我想创建 executeMappingStep 函数来封装该逻辑。 可能很难解释,我尽量简化。我做了一些改动来解释我刚才所说的。
【问题讨论】:
-
promise 使用了哪些参数以及它们是如何使用的?
-
所有这些都是简单的值,例如整数、字符串,或者在最坏的情况下,是原始类型的数组。
-
myPromise().then(看起来像myPromise是一个构造承诺的函数,而不是承诺......你想在哪里传递参数,例如myPromise(myPromiseParams).then(...?你的问题很混乱 -
不清楚你的意思是什么参数以及它们是如何使用的。
-
myPromiseParams 中的参数应该如何改变解析值 'result' ?举几个例子
标签: javascript node.js promise