±à¼ÍƼö: |
±¾ÎÄÀ´×ÔÓÚIBM£¬ÔÚ±¾ÎÄÖУ¬½«Ñ§Ï°ÈçºÎ°ë×Ô¶¯µØ´´½¨µ¥Ôª²âÊÔ£¬ÒÔ¼°ÈçºÎÔËÐÐÕâЩ²âÊÔÀ´ÑéÖ¤´úÂë¸ü¸ÄûÓÐÔì³ÉÈÎºÎÆÆ»µ¡£
|
|
OpenWhisk Ó¦ÓóÌÐòµÄÄ£¿é»¯ÐÔÖÊ£¬Ê¹µÃΪ´¿º¯Êýʽ ¡ª ÕâÒâζ×ÅûÓÐÈκθ±×÷Óã¬Ò²²»ÒÀÀµÓÚÍⲿ״̬µÄ²Ù×÷´´½¨µ¥Ôª²âÊÔ±äµÃºÜÈÝÒס£ÔÚ±¾½Ì³ÌÖУ¬½«Ñ§Ï°ÈçºÎ°ë×Ô¶¯µØ´´½¨µ¥Ôª²âÊÔ£¬ÒÔ¼°ÈçºÎÔËÐÐÕâЩ²âÊÔÀ´ÑéÖ¤´úÂë¸ü¸ÄûÓÐÔì³ÉÈÎºÎÆÆ»µ¡£
´¿º¯ÊýÊÇÂú×ãÒÔÏÂÁ½¸öÌõ¼þµÄº¯Êý£º
1.º¯ÊýµÄ½á¹û½öÒÀÀµÓÚÊäÈë²ÎÊý¡£ÈκÎʱºòʹÓÃÏàͬµÄÊäÈë²ÎÊýµ÷Óøú¯Êý£¬¶¼»á²úÉúÏàͬµÄ½á¹û¡£
2.¸Ãº¯ÊýûÓÐÈκθ±×÷Óã»»ñµÃ·µ»ØÖµÊÇÔËÐиú¯ÊýµÄΨһЧ¹û¡£
ʹÓÃÖîÈç OpenWhisk Ö®ÀàµÄº¯Êý¼´·þÎñ (FaaS) ¿ò¼Üʱ£¬¶ÔÓÚÈκÎ×÷Ϊ´¿º¯ÊýµÄ²Ù×÷£¬¶¼¿ÉÒÔʹÓÃÄúÔÚ±¾ÎÄÖÐѧµ½µÄ·½·¨À´Ó¦ÓÃ×Ô¶¯
QA¡£
¹¹½¨ÄúµÄÓ¦ÓóÌÐòÐèÒª×öµÄ×¼±¸¹¤×÷
OpenWhisk ºÍ JavaScript µÄ»ù±¾ÖªÊ¶
Ò»¸öÃâ·Ñ IBM Cloud ÕÊ»§
ÔËÐÐÓ¦ÓóÌÐò»ñÈ¡´úÂë
µ¥Ôª²âÊÔ
Ò»¸öʵÓõÄÓ¦ÓóÌÐò¿ÉÄÜÓɶà¸öÄ£¿é×é³É£¬Ã¿¸öÄ£¿é¶¼Ö´ÐÐÒ»¸öÌØ¶¨²Ù×÷¡£³ýÁ˶ÔÓ¦ÓóÌÐò½øÐÐÕûÌå²âÊÔÖ®Í⣬µ¥¶À²âÊÔÿ¸öÄ£¿éÒ²ºÜÓÐÓá£ÕâÖÖ²âÊÔÀàÐͳÆÎªµ¥Ôª²âÊÔ£¬¸Ã²âÊÔʹÄúÄܹ»Ê¶±ð
bug µÄλÖ㬲¢Ïà¶ÔÈÝÒ×µØÐÞ¸´ËüÃÇ¡£
µ¥Ôª²âÊÔµÄÒ»¸öÌôÕ½ÊÇ£¬ÄúÐèҪʶ±ðÿ¸öÄ£¿éµÄ¿ÉÄÜÊäÈëºÍÓëÆäÆ¥ÅäµÄÊä³ö¡£Èç¹ûÄ£¿éºÜ¼òµ¥£¬´Ë¹ý³Ì¿ÉÄܺÜÈÝÒ×
¡ª µ«ÊÇÄ£¿éÔ½¸´ÔÓ£¬´Ë¹ý³Ì¿ÉÄÜÔ½À§ÄÑ¡£¶ÔÓÚÉî¶ÈǶÈëÔÚÓ¦ÓóÌÐòÖÐÇÒÈËÀ಻¿É¶ÁµÄÊäÈë»òÊä³öµÄÄ£¿é£¬ÓÈÆäÈç´Ë¡£
¶ÔÓڳ䵱´¿º¯ÊýµÄ²Ù×÷£¬¿ÉÒÔÔÚʹÓÃÓ¦ÓóÌÐòʱͨ¹ý²é¿´ÈçºÎµ÷ÓÃÊäÈëºÍÊä³ö£¬À´×Ô¶¯Ê¶±ðÕâЩÊäÈëºÍÊä³ö¡£È»ºó£¬µ±³ÌÐòÔ±¸ü¸ÄÄ£¿éʱ£¬Äú¿ÉÒÔʹÓÃÏàͬµÄÊäÈëÖØÐÂÔËÐÐËü£¬ÒԲ鿴¸ü¸ÄÊÇ·ñÔì³ÉÁËÈÎºÎÆÆ»µ¡£
Ñù±¾Ó¦ÓóÌÐò
±¾½Ì³ÌµÄÄ¿µÄÊÇչʾ QA ¼¼Êõ£¬ËùÒÔÑù±¾Ó¦ÓóÌÐò·Ç³£¼òµ¥£ºÒ»¸ö´ÊµäÓ¦ÓóÌÐò£¬ÔÊÐíÓû§Ñ¡ÔñÒ»¸öÓ¢Îĵ¥´Ê£¬È»ºóÌṩÆäËûÓïÑԵĵÈЧ´Ê»ã¡£
´´½¨Ó¦ÓóÌÐòÐòÁÐ
ÒªÁ˽âÈçºÎÔÚ OpenWhisk Öбàдһ¸öÃæÏòÓû§µÄÓ¦ÓóÌÐò£¬ÇëÔĶÁÎҵĽ̡̳°ÎªÒ»¸öÁªÍø»·¾³¹¹½¨Ò»¸öÖÇÄÜËø¡±£¨µÚ
1¡¢2 ºÍ 5 С½Ú£©¡£Óë¸ÃÓ¦ÓóÌÐò¶ÔÓ¦£¬±¾½Ì³ÌÖеÄÓ¦ÓóÌÐòÓÉ 3 ¸ö²Ù×÷×é³É£º
1.getTranslation
2.translation2tables
3.tables2html
Äú½«ÔÚ OpenWhisk Öд´½¨ËùÓÐÕâ 3 ¸ö²Ù×÷£¬ËüÃÇͨ³£ÊÇ´¿²Ù×÷£¬µ«Êǵ± getTranslation
ÔÚ error ²ÎÊýÖлñµÃÁËÒ»¸öֵʱ£¬Ëü¿ÉÄܱäµÃ²»´¿¡£
´´½¨ÕâЩ²Ù×÷ºó£¬°´ÒÔÏ·½Ê½½«ËüÃÇ×éºÏµ½Ò»¸öÐòÁÐÖУ¬²¢ÈøÃÐòÁпɴÓä¯ÀÀÆ÷·ÃÎÊ£º
1.µ¥»÷×ó²à±ßÀ¸ÖÐµÄ Develop¡£
2.ÔÚ MY ACTIONS Ï£¬Ñ¡ÔñÐòÁÐÖеĵÚÒ»¸ö²Ù×÷ getTranslation¡£
3.µ¥»÷ Link into a Sequence¡£
4.µ¥»÷ MY ACTIONS ´ÅÌù£¬Ñ¡ÔñµÚ¶þ¸ö²Ù×÷ translation2tables£¬È»ºóµ¥»÷
Add to Sequence¡£
5.µ¥»÷ Extend£¬²¢Öظ´ÉÏÒ»²½À´Ìí¼ÓµÚÈý¸ö²Ù×÷£¨Ò²ÊÇ×îºóÒ»¸ö²Ù×÷£©tables2html¡£
6.µ¥»÷ This Looks Good¡£
½«ÐÂÐòÁÐÃüÃûΪ UnitTestsApp¡£µ¥»÷ Save Action Sequence£¬È»ºóµ¥»÷
Done¡£
¸ÃÐòÁÐÓ¦¸ÃÀàËÆÓÚÏÂͼ£º
ͼ 1. Ó¦ÓóÌÐòÐòÁÐ

Ó¦ÓóÌÐòÐòÁÐ
ÈøÃÐòÁпɴӻ¥ÁªÍø·ÃÎÊ
Ö´ÐÐÒÔϲ½ÖèÈøÃÐòÁпɴӻ¥ÁªÍø·ÃÎÊ£º
1.µ¥»÷×ó²à±ßÀ¸ÖÐµÄ APIs¡£
2.µ¥»÷ Create Managed API¡£
3.½«¸Ã API ÃüÃûΪ UnitTestsApp¡£ÊäÈë»ù±¾Â·¾¶
/UnitTestsApp¡£
4.µ¥»÷ Create Operation£¬²¢Ê¹ÓÃÒÔϲÎÊý´´½¨Ò»¸ö²Ù×÷£º

5.ÏòϹö¶¯£¬È·±£Ñ¡ÔñÁË Enable CORS£¬²¢µ¥»÷ Save
& expose¡£
6.¸´ÖƸ÷¾¶£¬½«ËüÕ³Ìùµ½ä¯ÀÀÆ÷´°¿ÚÖУ¬ÔÚĩβ´¦ÊäÈë /translate£¬²¢ä¯ÀÀµ½¸Ã
URL£¨ÎÒµÄ URL Ϊ
7.È·±£ÔÚµ¥»÷Ó¦ÓóÌÐòÖеÄÀ¶É«°´Å¥Ê±£¬Äú»á»ñµÃÒëÎÄ¡£µ¥»÷Ó¦ÓóÌÐòÖеĺìÉ«°´Å¥Ê±£¬Äú¿ÉÄÜ»ñµÃÒëÎÄ»ò´íÎóÏûÏ¢¡£
ͼ 2. Ñù±¾ÒëÎÄ

²¶»ñ£¨ÊäÈë¡¢Êä³ö£©¶Ô
Òª´´½¨µ¥Ôª²âÊÔ£¬ÐèÒª»ñÈ¡ÊäÈëºÍÓëÆäÆ¥ÅäµÄÊä³ö¡£Îª´Ë£¬×î¼òµ¥µÄ·½·¨ÊDZ༸ÃÐòÁУ¬½«ÏÖÓвÙ×÷Ìæ»»ÎªÒ»¸ö°ü×°Æ÷£¬¸Ã°ü×°Æ÷»áµ÷ÓÃÔʼ²Ù×÷²¢´æ´¢ÆäÊäÈëºÍÊä³ö¡£
1.½«²Ù×÷Ìæ»»Îª°ü×°Æ÷
2.Òª½«²Ù×÷Ìæ»»Îª°ü×°Æ÷£¬Ê×ÏÈÐèÒªÄܹ»Ô¶³Ìµ÷ÓøòÙ×÷¡£¿ÉÒÔ½«ËüÌí¼Óµ½
API »òʹÆä³ÉΪһ¸ö Web ²Ù×÷£¬µ«Ê¹ÓÃÏÂÃæµÄ·½·¨¸üÈÝÒ׸ü°²È«£º
3.µ¥»÷×ó²à±ßÀ¸É쵀 Develop ²¢´ò¿ª²Ù×÷ (getTranslation)¡£
4.µ¥»÷ View REST Endpoint¡£
ÏòϹö¶¯µ½ cUrl ÃüÁî²¢µ¥»÷ Show Full Command¡£½«¸ÃÃüÁî¸´ÖÆµ½Îı¾ÎļþÖС£
5.ʹÓà base64 ½âÂëÆ÷£¨±ÈÈçÕâ¸ö½âÂëÆ÷£©½âÂëÑéÖ¤ÐÅÏ¢£¨Basic
ºóÃæµÄ²¿·Ö£©£¬ÈçÏÂÃæµÄ²åͼËùʾ£¨¸ÃÖµÒѱàУ£©¡£Õâ¸öÖµÊÇÄúµÄ API ÃÜÔ¿¡£
ͼ 3. ÑéÖ¤ÐÅÏ¢

µã»÷²é¿´´óͼ
6.ʹÓôËÎļþµÄÄÚÈÝ´´½¨Ò»¸öÃûΪ callGetTranslation
µÄвÙ×÷£¨È·±£ÔÚµÚ 4 ÐÐÉ쵀 api_key ºÍµÚ 11 ÐÐÉ쵀 name ÖзÅÈëÁËÄú×Ô¼ºµÄÖµ£©¡£
7.ÔËÐиòÙ×÷£¬¿ÉÒԹ۲쵽£¬ËüÔÚ¹¦ÄÜÉϵÈЧÓÚ getTranslation¡£
ÄÇôËüµÄ¹¤×÷ÔÀíÊÇʲô£¿
ÕâЩ´úÂëÐÐʹÓà OpenWhisk NPM ¿âÀ´¹¹ÔìÒ»¸öÓë·þÎñÆ÷µÄÁ¬½Ó¡£¸ÃÁ¬½ÓÐèÒªÖ÷»úÃûºÍ API
ÃÜÔ¿£¨ÄúÐèÒªÌṩÕâЩÐÅÏ¢ ¡ª ÎÒûÓиæËßÄúÎÒµÄÐÅÏ¢£¬·ñÔòÄúÎÞÐèÎÒµÄÔÊÐí¾ÍÄÜÖ´ÐÐÎÒµÄËùÓÐ OpenWhisk
²Ù×÷£©¡£
´Ó¼ÆËã»ú½Ç¶È½²£¬µ÷ÓÃÁíÒ»¸ö OpenWhisk ²Ù×÷¿ÉÄÜÒª»¨ºÜ³¤Ê±¼ä£¬ËùÐèʱ¼äÉõÖÁ¿ÉÄܳ¤´ïÒ»Ã롣ΪÁ˱ÜÃâΪÕû¸ö¹ý³Ì¸¶·Ñ£¬ÄúÐèÒª´´½¨²¢·µ»ØÒ»¸ö
Promise ¶ÔÏó¡£¶ÔÏó¹¹Ô캯ÊýÓÐÒ»¸ö²ÎÊý£¬ÄǾÍÊÇÄúΪÁË»ñµÃ½á¹û¶øÔËÐеĺ¯Êý¡£´Ëº¯Êý½ÓÊÕÁ½¸ö²ÎÊý
¡ª Ò»¸öÊÇÔڳɹ¦Ê±µ÷Óõĺ¯Êý£¬ÁíÒ»¸öÊÇÔÚʧ°Üʱµ÷Óõĺ¯Êý¡£
return
new Promise((success, failure) => { |
ÔÚµ÷Óà Promise º¯Êýʱ£¬Ëüµ÷Óà ow.actions.invoke À´ÔËÐÐÔʼ OpenWhisk
²Ù×÷¡£name ²ÎÊýÊÇÔʼ²Ù×÷µÄ·¾¶£¨ÄúÐèÒª½«ËüÌæ»»Îª×Ô¼ºµÄÖµ£©¡£Èç¹ûµ÷Óà invocation ʱûÓÐ×èÈû£¬½«»áÁ¢¼´·µ»ØÒ»¸ö
ID£¬ÄúÉÔºó¿ÉÒÔʹÓøà ID À´²éѯ½á¹û ¡ª µ«¶ÔÓÚ±¾ÓÃÀý£¬×îºÃÔÚÄú»ñµÃ´ð°¸Ö®Ç°×èÈû¡£
var
invocation = ow.actions.invoke({
name: '/developerWorks_Ori-Pomerantz-apps/unit-tests/getTranslation',
blocking: true,
params: params
}); |
invocation ±äÁ¿°üº¬Ò»¸ö Promise ¶ÔÏó¡£then ·½·¨½«»á»ñÈ¡ Promise ÄÚµ÷Óõĺ¯Êý£¬È»ºóʹÓýá¹ûÀ´µ÷ÓòÎÊýº¯Êý¡£
invocation.then((resVal)
=> { |
´´½¨²¢¼Ç¼£¨ÎªÁËÏÔʾֵ£©Ò»¸ö°üº¬ÊäÈëºÍÊä³öµÄ±äÁ¿£º
var
logMe = {
input: params,
output: resVal.response.result
};
console.log(logMe); |
½«½á¹û·µ»Ø¸øµ÷ÓÃÔʼ Promise ¶ÔÏóµÄ OpenWhisk »ù´¡¼Ü¹¹¡£
success(resVal.response.result);
});
});
} |
ÔÚͼ 4 ÖУ¬¿ÉÒÔ¿´µ½À´×ÔÁ½¸ö²»Í¬µ÷ÓõÄÈÕÖ¾£¬Ò»¸öµ÷ÓõÄÊäÈëÊǿյģ¬ÁíÒ»¸öµ÷ÓõÄÊäÈëÖаüº¬Ò»¸öµ¥´Ê¡£
ͼ 4. Á½¸öµ÷ÓÃÈÕÖ¾

½«£¨ÊäÈë¡¢Êä³ö£©¶ÔдÈë Cloudant
µ¥Ôª²âÊÔÊý¾ÝÒª±äµÃÓÐÓã¬ÐèÒª±£ÁôÔÚÒ»¸ö Cloudant Êý¾Ý¿âÖС£Ê×ÏÈ£¬°´ÕÕÕâÆªÎÄÕÂµÚ 4a С½ÚÖеĽéÉÜ£¬´´½¨ÕâÑùÒ»¸öÊý¾Ý¿â£¨ÃüÃûΪ
expected£©£¨·þÎñµÄÃû³ÆÎ޹ؽôÒª£©¡£È»ºó½« callGetTranslation µÄ´úÂëÌæ»»ÎªÕâ¸öÎļþµÄÄÚÈÝ¡£Çë¼ÇµÃ¸ü¸ÄµÚ
4 ÐУ¨OpenWhisk API ÃÜÔ¿£©¡¢9-13 ÐУ¨Cloudant ƾ֤£©ºÍ 26 ÐУ¨²Ù×÷µÄ·¾¶£©ÖеÄÏà¹Ø²ÎÊý¡£
ÎÒ½öÔÚÕâÀï½âÊÍÒ»ÏÂÓëÊý¾Ý¿âÏà¹ØµÄеIJ¿·Ö¡£
Cloudant Êý¾Ý¿âÌõÄ¿£¨³ÆÎªÎĵµ£©¿ÉʹÓÃ×Ö·û´®½øÐзÃÎÊ¡£Äú½«Ê¹ÓõÄË÷ÒýÊÇÊäÈë²ÎÊý¡£
var
dbKey = JSON.stringify(params); |
ÔÚ½«Ò»¸öÌõĿдÈëÊý¾Ý¿â֮ǰ£¬Ó¦¸Ã¼ì²éÒ»ÏÂ֮ǰÊÇ·ñ¿´µ½¹ýÕâ¸öÊäÈë¡£
//
Did we already see this input?
mydb.get(dbKey, (err, body) => { |
Èç¹û³¢ÊÔ»ñµÃÒ»¸öÎĵµ²¢Ê§°Ü£¬Äú»á»ñµÃÒ»¸ö°üº¬×´Ì¬´úÂë 404 µÄ´íÎó¡£ÔÚÕâÖÖÇé¿öÏ£¬¿ÉÒÔ½«ÊäÈëֵдÈë¸ÃÊý¾Ý¿â£¬È»ºóµ÷Óûص÷º¯Êý¡£
//
No, write it.
if (err != null && err.statusCode ==
404) {
mydb.insert(
{"_id": JSON.stringify(params), data:
logMe},
() => {
success(resVal.response.result);
}); // end of mydb.insert call
} // End of "this value has not been found"
else { // Assume value has been found, for the
sake of simplicity |
Èç¹û´ËÊäÈëÖµÒÑÔÚÊý¾Ý¿âÖУ¬¿ÉÒÔ½«µ±Ç°Êä³öÓëÊý¾Ý¿âÖеÄÊä³ö½øÐбȽϡ£Èç¹ûËüÃÇÊÇÏàͬµÄ£¬ÔòûÓÐÎÊÌâ¡£Èç¹ûËüÃÇÊDz»Í¬µÄ£¬Ôò´æÔÚÒ»¸öÎÊÌâ¡£¸Ã²Ù×÷ûÓÐ×÷Ϊһ¸ö´¿º¯ÊýÔËÐУ¬¿ÉÄÜÊÇÒòΪ´æÔÚÒ»¸ö
bug£¬Ò²¿ÉÄÜÊÇÒòΪËüÒ»¿ªÊ¼¾Í²»ÊÇ´¿º¯Êý¡£
´ËÑù±¾´úÂë½ö½«ÎÊÌⱨ¸æ¸ø¿ØÖÆÌ¨¡£ÔÚ¸üÕæÊµµÄʵÏÖÖУ¬´úÂë»á½«ÎÊÌâ¼Ç¼µ½ÎÊÌâ¸ú×Ùϵͳ£¬ÓÃÓÚ¿ª·¢ºÍ QA¡£
//
We found this before, but the output was different
then
if (JSON.stringify(body.data) !== JSON.stringify(logMe))
{
console.log("This action isn't a pure function.");
console.log("For input:"+ JSON.stringify(params));
console.log("Old output:"+ JSON.stringify(body.data.output));
console.log("New output:"+ JSON.stringify(logMe.output));
} |
ÎÞÂÛ²úÉúÆäËûÈκνá¹û£¬¶¼ÐèÒª·µ»ØÊä³öÖµ¡£
// Regardless, return the value.
success(resVal.response.result);
} // End of "this value has been found,
not new"
}); // end of mydb.get call |
ÓëÓ¦ÓóÌÐò¼¯³É
×îºó£¬±à¼Ó¦ÓóÌÐòµÄÐòÁУ¬ÒԱ㽫¾É²Ù×÷ getTranslation Ìæ»»ÎªÐ²Ù×÷ callGetTranslation¡£È»ºóÔËÐиÃÓ¦ÓóÌÐò£¬Ñ¡Ôñ²»Í¬µÄÑ¡ÏîÀ´»ñµÃ×ã¹»µÄÊäÈëºÍ¶ÔÓ¦µÄÊä³ö¡£
Çë×¢Ò⣬Èç¹û²é¿´¸ÃÊý¾Ý¿â£¬¿ÉÄÜ¿´µ½´óÁ¿Î´ÔøÁϵ½µÄÊäÈë²ÎÊý¡£ÕâÊÇÒòΪÐòÁÐÖеĵÚÒ»¸ö²Ù×÷»ñÈ¡Á˹ØÓÚ HTTP
ÇëÇóµÄÐÅÏ¢£¬ÕâÊÇÎÒÃÇÔÚ±¾Ê¾ÀýÖиú×ٵIJÙ×÷¡£ÕâЩ¶îÍâµÄ²ÎÊý²»»áµ¼ÖÂÈκÎÎÊÌâ¡£
ʹÓõ¥Ôª²âÊÔ
ÔÚÊý¾Ý¿âÖÐÓµÓÐÐÅÏ¢ºó£¬¾Í¿ÉÒÔʹÓÃËüÀ´ÔËÐе¥Ôª²âÊÔÁË¡£Ê¹ÓôËÄÚÈÝ´´½¨Ò»¸öвÙ×÷¡£ÔÚµÚ 4¡¢13 ºÍ 38
ÐзÅÈëÕýÈ·µÄ±êʶ·û¡£ÔËÐд˲Ù×÷ʱ£¬»á·µ»ØÒÔÏÂ×ֶΣº
match¡ª ²Ù×÷·µ»ØÁËÔ¤ÆÚÊä³öµÄ²âÊÔ°¸ÀýµÄÊýÁ¿
noMatch¡ª ²Ù×÷·µ»ØÁ˲»Í¬ÖµµÄ²âÊÔ°¸ÀýµÄÊýÁ¿
problems¡ª ¼ì²â³öÎÊÌâµÄÊäÈëÖµÁбí
´Ë²Ù×÷µÄ´ó²¿·ÖÄÚÈݶ¼Ê¹ÓÃÁ˱¾ÎÄÖÐ֮ǰʹÓõÄ×é¼þ¡£async.map µ÷ÓÃÊÇÒ»¸öÀýÍâ¡£´Ëº¯Êý½ÓÊÕ 3
¸ö²ÎÊý£ºÒ»¸öÁбíºÍÁ½¸öº¯Êý¡£È»ºó£¬ËüΪÁбíÖеÄÿһÏîµ¥¶Àµ÷ÓõÚÒ»¸öº¯Êý (iteratee)£¬¾ÍÏñº¯Êýʽ±à³ÌÖÐµÄÆÕͨӳÉäÒ»Ñù¡£²»Í¬Ö®´¦ÔÚÓÚµ÷Óõĺ¯Êý¿ÉÒÔÊÇÒì²½µÄ¡£Ëü»ñÈ¡Á½¸ö²ÎÊý£ºÀ´×ÔÁбíµÄÏîºÍÒ»¸öÔÚ¸ÃÒì²½¹ý³ÌÍê³Éʱµ÷ÓõĻص÷º¯Êý¡£ÕâʹÄúÄܽ«¸ÃÓ³ÉäÓÃÓÚÒì²½º¯Êý
¡ª ÀýÈçµ÷ÓÃÒ»¸ö²»Í¬µÄ OpenWhisk ²Ù×÷¡£µÚÈý¸ö²ÎÊý£¨¿ÉÑ¡²ÎÊý£¬µ«ÕâÀïÒÑʹÓã©ÊÇÒ»¸öÔÚÓ³ÉäÍê³Éºóµ÷Óõĺ¯Êý¡£
async.map(body.rows,
(obj, callback) => {
¡
callback();
});
}, // end of the iteratable, which is called
for every item
(err, results) => {
,,,
} // end of the post map callback
); // end of async.map |
ÐÅÏ¢±»ÊÕ¼¯µ½Ò»Ð©±äÁ¿ÖУ¬ÕâЩ±äÁ¿ÔÚ¶Ô iteratee µÄ²»Í¬µ÷ÓÃÖ®¼ä±»¹²Ïí¡£ÔÚһЩ»·¾³ÖУ¬ÕâÒªÇóÄú¿¼ÂÇḬ̈߳²È«ÐÔ£¬µ«
Node.js µÄµ¥Ïß³ÌÐÔÖÊ¿ÉÒÔÈ·±£²»»áÓÐÁ½¸öÏß³Ìͬʱ³¢ÊÔ¸ü¸ÄÒ»¸ö±äÁ¿¡£
ÕâÊÇÔÚ JSON ¸ñʽ»¯Æ÷ÖÐÏÔʾµÄÑù±¾½á¹û£¨ÒÔ±ã×îС»¯²»Ïà¹ØµÄ HTTP ±êÍ·£©£º
ͼ 5. Ñù±¾½á¹û

½áÊøÓï
ÔÚ±¾½Ì³ÌÖУ¬Äú¿ª·¢ÁËÒ»¸öÔÐÍÀ´È·¶¨´¿º¯ÊýµÄ²Ù×÷£¨Ê¹ÓÃÏàͬµÄÊäÈëʼÖÕÉú³ÉÏàͬµÄÊä³ö£¬¶øÇÒûÓи±×÷Óã©ÊÇ·ñʵ¼ÊÉÏÓ¦¸ÃÖÁÉÙÓµÓÐÒ»¸ö´¿ÊôÐÔ¡£²»ÐÒµÄÊÇ£¬Äú²»Äܼì²éÖîÈç
OpenWhisk ²Ù×÷Ö®ÀàµÄºÚºÐÀ´Á˽⸱×÷Óá£ÎÒ¼ò»¯ÁËÕâ¸öÔÐÍ£¬ÒԱ㾡¿ÉÄÜÇå³þµØ½âÊÍÏà¹Ø¸ÅÄî¡£Èç¹ûÄúÏëʵ¼ÊʹÓÃËü£¬ÔòÐèÒªÌí¼ÓÆäËûÒ»Ð©ÌØÐÔ¡£
1.ÓÅÑŵØÊ§°Ü¡£Ä¿Ç°ÎªÖ¹£¬´Ë´úÂë¼ÙÉèûÓгöÏÖ´íÎó¡£ÕâÓеã¹ýÓÚÀÖ¹Û¡£
2.²»Òª½öµ÷Óñ»²âÊԵIJÙ×÷Ò»´Î£¬¶øÊÇÓ¦¸Ã¶à´Îµ÷ÓÃËü¡£ ÕâÑù£¬²Å¸üÓпÉÄܼì²â³öÎÊÌâ¡£
3.½«Õý±»µ÷ÓõIJÙ×÷µÄÃû³ÆÌí¼Óµ½Êý¾Ý¿â¼üÖУ¨ËüĿǰֻÊÇÊäÈë²ÎÊý£©¡£ÕâÑù¾Í¿ÉÒÔ¶Ô¶à¸ö²Ù×÷ʹÓÃͬһ¸öÊý¾Ý¿â¡£
Õâ 3 ¸öÌØÐÔÏà¶ÔÈÝÒ×ʵÏÖ£¬µ«ÈÔÐèÒª½« OpenWhisk ²Ù×÷×÷ΪºÚºÐ¶Ô´ý¡£Ò»¸ö¸ü¾ßÌôÕ½µÄÌØÐÔÊÇΪ²Ù×÷ÓëÆäËûϵͳ£¨±ÈÈç
Cloudant£©Ö®¼äµÄÁ¬½Ó½¨Á¢´úÀí£¬À´½«²»ÊÇ´¿º¯ÊýµÄ²Ù×÷ת»»Îª´¿º¯Êý£»Îª´Ë£¬Äú¿ÉÒÔÔÚǰһ´ÎʹÓÃÏàͬÊäÈëÖ´Ðе÷ÓÃÀ´Ìṩ״̬ºó£¬´ÓÆäËûϵͳÌṩÏàͬµÄ״̬ÐÅÏ¢£¬Ïû³ý¸Ã²Ù×÷³¢ÊÔ´´½¨µÄÈκθ±×÷Óá£
|